teleport/client/tp_assist/msocketx.h

118 lines
3.0 KiB
C
Raw Normal View History

2016-12-06 17:05:56 +00:00
#ifndef MSOCKETX_H_
#define MSOCKETX_H_
#ifdef _WIN32
#pragma comment(lib,"ws2_32.lib")
#include "winsock2.h"
typedef int socklen_t;
#else
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h> //for ntohs
#include <sys/time.h> //for timeval
#include <errno.h>
#include <fcntl.h>
#include <netinet/tcp.h>
typedef int SOCKET;
#define SOCKET_ERROR (-1)
#define INVALID_SOCKET (-1)
#endif
#define CAN_READX 1
#define CAN_WRITEX 2
#define CAN_CONNECTX 4
#define CAN_ACCEPTX 8
class msocketx
{
public:
msocketx();
virtual ~msocketx();
public:
// startup <20><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>,linux<75><78><EFBFBD>Բ<EFBFBD><D4B2>õ<EFBFBD><C3B5><EFBFBD>
static bool startup();
// clearup <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>,linux<75><78><EFBFBD>Բ<EFBFBD><D4B2>õ<EFBFBD><C3B5><EFBFBD>
static bool clearup();
// getlasterror <20><>ȡ<EFBFBD><C8A1>һ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int getlasterror();
public:
// attch <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>socket
void attach(SOCKET sock);
// isvalid <20>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
inline bool isvalid();
// close <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>isvalid,Ȼ<><C8BB>shutdown,Ȼ<><C8BB>closesocket,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵINVALIDSOCKET
void close();
// setsock <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>setsockbuff,setsocktime.
bool setsock();
// create <20><><EFBFBD><EFBFBD>socket
bool create(int itype,int iprotocol);
// bind <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ip<69>Ͷ˿<CDB6>,<2C><><EFBFBD><EFBFBD>pstripΪ<70><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip
bool bind(unsigned short usport,const char* pstrip = NULL);
// sendto <20><><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD>
int sendto(const void* pbuf, unsigned int ilen, unsigned int uiip, unsigned short usport, int iflags);
// sendto <20><><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD>
int sendto(const void* pbuf, unsigned int ilen, const char* pszip, unsigned short usport, int iflags);
// recvfrom <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int recvfrom(void* pbuf, unsigned int ilen, unsigned int& uiip, unsigned short& usport, int iflags);
// send <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int send(const void* pbuf, unsigned int ilen,int iflags);
// recv <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int recv(void* pbuf,unsigned int ilen,int iflags);
// listen <20><><EFBFBD><EFBFBD>
bool listen(int ibacklog);
// accept <20><><EFBFBD><EFBFBD>
bool accept(SOCKET& sock,sockaddr* peeraddr,socklen_t* addrlen);
bool accept(msocketx& sock,sockaddr* peeraddr,socklen_t* addrlen);
// connect <20><><EFBFBD><EFBFBD>,usportΪ<74><CEAA><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>.
int connect(const char* pszip,unsigned short usport,bool bblock);
// wait <20>ȴ<EFBFBD>iflagx<67>¼<EFBFBD>,<2C>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CAN_READX...<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-1,0<><30>ʾ<EFBFBD><CABE>ʱ,
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿɲ<D8BF><C9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><><C8A1><EFBFBD>ж<EFBFBD>
int wait(unsigned int uimilli,int iflagx);
public:
// setblock <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
bool setblock(bool bblock = false);
// setsockbuff <20><><EFBFBD><EFBFBD>socketϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
bool setsockbuff(unsigned int uirecvlen = 4 * 1024 * 1024,
unsigned int uisendlen = 4 * 1024 * 1024);
// setsocktime <20><><EFBFBD><EFBFBD>send\recv<63><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>.
bool setsocktime(unsigned int uimillisecond = 500);
// setsocknagle <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>nagle<6C>㷨.
bool setsocknagle(bool benable = true);
// shutdown 0 read,1 write,2 both
int shutdown(int ihow);
// closesocket <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺص<C4B9>socket
int closesocket();
// getsockname <20><>ȡ<EFBFBD><C8A1>socket<65><74>ǰ<EFBFBD>󶨵<EFBFBD>ַ,ulip Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,usportΪ<74><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int getsockname(unsigned int& uiip,unsigned short& usport);
private:
SOCKET m_sock;
};
#endif //MSOCKETX_H_