mirror of https://github.com/tp4a/teleport
118 lines
3.0 KiB
C
118 lines
3.0 KiB
C
![]() |
#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_
|