compat.h.svn-base

来自「这是一个很好的参考代码」· SVN-BASE 代码 · 共 69 行

SVN-BASE
69
字号
#ifndef __COMPAT_H__#define __COMPAT_H__#include <sys/socket.h>#include <netdb.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>typedef int SOCKET; // get round windows definitions.struct SOCKADDR_IN {  sockaddr_in ADDR; // we are wrapping this structure.  /* this is bad as we just assume that the address "addr" is valid here   * need a real check   */  SOCKADDR_IN(const std::string& address, unsigned short port, short family = AF_INET) {    ADDR.sin_port = port;    ADDR.sin_family = family;    ok = (inet_aton(address.c_str(), &ADDR.sin_addr));  }    SOCKADDR_IN(const SOCKADDR_IN& addr) {    ADDR = addr.ADDR;    ok = addr.ok;  }  SOCKADDR_IN operator = (const SOCKADDR_IN& addr) {    ADDR = addr.ADDR;    ok = addr.ok;    return *this;  }    operator bool() const {return ok;}  operator const sockaddr_in () const {    return ADDR;  }  operator const sockaddr () const {    sockaddr addr;    std::copy((char*)&ADDR, (char*)&ADDR + sizeof(ADDR), (char*)&addr);    return addr;  }  size_t get_size() const {return sizeof(ADDR);}  char* get_sin_addr() {    return (char*)&ADDR.sin_addr;  }  void set_port(unsigned short newport) {ADDR.sin_port = newport;}  void set_ip(const std::string& newip) {    ok = (inet_aton(newip.c_str(), &ADDR.sin_addr));  }  void zeroaddress() {    ADDR.sin_addr.s_addr = 0;  }  private:  bool ok;};bool Connect(SOCKET sockfd, const SOCKADDR_IN& addr);bool Socket(SOCKET& s, int domain, int type, int protocol);bool Send(int &CharsSent, SOCKET s, const char *msg, size_t len, int flags);bool Recv(int &CharsRecv, SOCKET s, char *buf, size_t len, int flags);void Closesocket(const SOCKET& s);void initNetworking();#endif //  #ifndef __COMPAT_H__

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?