Files
mir_server/Gateway/srvlib/include/net/base_socket.h

132 lines
4.2 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#ifndef _BASE_SOCKET_H_
#define _BASE_SOCKET_H_
/******************************************************************
*
* $ ͨ<EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> $
*
* - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> -
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD>ַ<EFBFBD>װ<EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>
*
*****************************************************************/
#ifdef _MSC_VER
#define socklen_t int
#include <winsock.h>
#else
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#define SOCKET int
#define WSAGetLastError() errno
#define WSAEWOULDBLOCK EWOULDBLOCK
#define closesocket close
#define OUT
#include <errno.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <netdb.h>
#endif
namespace net
{
/* <09><><EFBFBD><EFBFBD>TCP<43>׽<EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD>
*/
class BaseSocket
{
protected:
SOCKET socket_; //<2F>׽<EFBFBD><D7BD><EFBFBD>
sockaddr_in local_addr_; //<2F>󶨵ı<F3B6A8B5><C4B1>ص<EFBFBD>ַ
sockaddr_in remote_addr_; //Զ<>̵<EFBFBD>ַ
bool block_flag_; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
bool connected_; //<2F>Ƿ<EFBFBD><C7B7>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool connectint_; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F><EFBFBD><E1B9A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual void OnConnected();
//<2F><EFBFBD><E1B9A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>ӶϿ<D3B6><CFBF><EFBFBD><EFBFBD>¼<EFBFBD>
virtual void OnDisconnected();
//<2F><EFBFBD><E1B9A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual void OnError(int errorCode);
protected:
//<2F>̳<EFBFBD><CCB3><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ش˺<D8B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>еIJ<D0B5><C4B2><EFBFBD>
virtual void Connected();
//<2F>̳<EFBFBD><CCB3><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ش˺<D8B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>еIJ<D0B5><C4B2><EFBFBD>
virtual void Disconnected();
//<2F>̳<EFBFBD><CCB3><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ش˺<D8B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>еIJ<D0B5><C4B2><EFBFBD>
virtual void SocketError(int nErrorCode);
public:
BaseSocket();
virtual ~BaseSocket();
//<2F><><EFBFBD><EFBFBD>SOCKET
inline SOCKET getSocket()
{
return socket_;
}
//<2F><><EFBFBD><EFBFBD>SOCKET
void setSocket(const SOCKET socket);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>true<75><65>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false<73><65>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline bool getBlockMode()
{
return block_flag_;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>true<75><65>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false<73><65>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD>
int setBlockMode(const bool block);
//<2F>ж<EFBFBD>SOCKET<45>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
inline bool connected()
{
return connected_;
}
//<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>ر<EFBFBD><D8B1>׽<EFBFBD><D7BD><EFBFBD>
void Close();
//<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>,sd<73><64>ʾ<EFBFBD>Ͽ<EFBFBD><CFBF>ķ<EFBFBD>ʽ,<2C>ֱ<EFBFBD><D6B1><EFBFBD>SD_RECEIVE<56><45>SD_SEND<4E><44>SD_BOTH
int shutDown(const int sd);
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>32λ<32><CEBB>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>󶨵<EFBFBD><F3B6A8B5>ƶ<EFBFBD><C6B6>ĵ<EFBFBD>ַ<EFBFBD>Ͷ˿ڣ<CBBF><DAA3><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD>
int bind(const u_long addr, const int port);
//ͨ<><CDA8>ָ<EFBFBD><D6B8>IP<49><50>ַ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ͷ˿ڰ󶨵<DAB0>ָ<EFBFBD><D6B8><EFBFBD>ĵ<EFBFBD>ַ<EFBFBD>Ͷ˿ڣ<CBBF><DAA3><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD>
//int bind(const char* addr, const int port);
//<2F><>ȡ<EFBFBD>󶨵ı<F3B6A8B5><C4B1>ص<EFBFBD>ַ<EFBFBD>Ͷ˿ڵ<CBBF>sockaddr_in<69>
inline void getLoaclAddr(sockaddr_in* addr_in)
{
*addr_in = local_addr_;
}
//<2F><>ȡԶ<C8A1>̵ĵ<CCB5>ַ<EFBFBD>Ͷ˿ڵ<CBBF>sockaddr_in<69>
inline void getRemoteAddr(sockaddr_in* addr_in)
{
*addr_in = remote_addr_;
}
//<2F><><EFBFBD><EFBFBD>Զ<EFBFBD>̵<EFBFBD>ַ<EFBFBD><D6B7>Ϣ
inline void setRemoteAddr(const sockaddr_in* addr_in)
{
remote_addr_ = *addr_in;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>
int getRecvBufSize(int* size);
//<2F><><EFBFBD>ý<EFBFBD><C3BD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>
int setRecvBufSize(int size);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>
int getSendBufSize(int* size);
//<2F><><EFBFBD>÷<EFBFBD><C3B7>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>
int setSendBufSize(int size);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>backlog<6F><67>ʾÿ<CABE>οɽ<CEBF><C9BD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD>
int listen(const int backlog = 5);
//ͨ<><CDA8>32λIP<49><50>ַ<EFBFBD><D6B7><EFBFBD>ӵ<EFBFBD><D3B5>ƶ<EFBFBD><C6B6>Ķ˿ڣ<CBBF><DAA3><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int connect(const u_long addr, const int port, bool block);
//ͨ<><CDA8>IP<49><50>ַ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķ˿ڣ<CBBF><DAA3><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//int connect(const char* addr, const int port, bool block);
//<2F><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ӣ<EFBFBD>wait_msec<65><63>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>socket<65><74><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>׽<EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD>SOCKET_ERROR-1<><31>ʾ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int accept(SOCKET* socket, size_t wait_msec, sockaddr_in* addr);
//<2F><><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD>ֵΪsocket<65><74><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>socket<65><74><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>socket
static int createSocket(OUT SOCKET* socket, const int af = AF_INET, const int type = SOCK_STREAM, const int protocol = IPPROTO_TCP);
//<2F><>ȡ<EFBFBD>׽<EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD><DDA1><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ѶϿ<D1B6><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SOCKET_ERROR<4F><52>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬷<EFBFBD><F3A3ACB7><EFBFBD>SOCKET_ERROR-1<><31>ʾû<CABE><C3BB><EFBFBD><EFBFBD><EFBFBD>ݿɶ<DDBF>(<28><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>׽<EFBFBD><D7BD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʵ<CABE>ʽ<EFBFBD><CABD>յ<EFBFBD><D5B5>ֽ<EFBFBD><D6BD><EFBFBD>
virtual int recv(void* buf, int len, const int flags = 0);
//<2F><><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ѶϿ<D1B6><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SOCKET_ERROR<4F><52>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬷<EFBFBD><F3A3ACB7><EFBFBD>SOCKET_ERROR-1<><31>ʾsend<6E><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>׽<EFBFBD><D7BD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD>򷵻ط<F2B7B5BB><D8B7>͵<EFBFBD><CDB5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
virtual int send(void* buf, int len, const int flags = 0);
};
};
#endif