📄 tcpsocket.h.bak
字号:
/*
2003 by zhy
*/
#ifndef _MY_SOCKET_H
#define _MY_SOCKET_H
#pragma warning(disable:4786)
#include <string>
using namespace std;
#include <winsock2.h>
#include "mstatebase.h"
namespace NET{
class CTcpSocket:public CSocketBase
{
public:
////////////////////////////////////////////////////////////////////////////
// Constructors / Destructor //
////////////////////////////////////////////////////////////////////////////
// Construct
CTcpSocket(SOCKET sock = INVALID_SOCKET);
// Deconstruct
~CTcpSocket();
////////////////////////////////////////////////////////////////////////////
// Inline Set/Get Operations //
////////////////////////////////////////////////////////////////////////////
inline int gettimeout() const { return m_timeout; }
inline int gettimeoutsec_u() const { return m_timeoutU; }
inline void settimeout(int timeout = 0,int timeoutUsec = 0)
{
m_timeout = timeout;
m_timeoutU = timeoutUsec;
}
// Get Own address
inline int Getsockname(struct sockaddr *name, int *namelen);
inline bool Getsockip(unsigned char* ip);
inline bool Getsockip(string& ip);
// Get Peer address
inline int Getpeername(struct sockaddr *name, int *namelen);
inline bool Getpeerip(unsigned char* ip);
inline bool Getpeerip(string& ip);
////////////////////////////////////////////////////////////////////////////
// Operations //
////////////////////////////////////////////////////////////////////////////
bool Connect(const char * ip,unsigned short port);
bool Listen(unsigned short port,int len = 5,unsigned long ip=INADDR_ANY,bool boBlocking = true);
bool Accept(CTcpSocket& socket);
bool Acceptfrom(CTcpSocket& slisten);
// the Main R/W Operation
int Write(const void *buf, size_t len);
int Read(void *buf, size_t len);
// Close
void Close();
void Onlyclose();
void Shutdown();
// Hidden Type Change
operator SOCKET() const { return m_sock; }
protected:
////////////////////////////////////////////////////////////////////////////
// Inner Operations //
////////////////////////////////////////////////////////////////////////////
inline bool Initsocket(int domain, int type, int protocol);
protected:
sockaddr_in m_peeradd;
sockaddr_in m_sockadd;
int m_nLenpeeraddr;
int m_nLensockaddr;
int m_timeout;
int m_timeoutU;
bool m_isserver;
};
class MTCPSocket : public MStateBase
{
public:
void FromSocket(SOCKET id = INVALID_SOCKET)
{
MStateBase::m_nState = (id == INVALID_SOCKET ? MStateBase::STATE_CLOSE : MStateBase::STATE_OPEN);
m_sock = id;
m_timeout = 3;
}
void FromSocket(SOCKET id ,struct sockaddr_in *name, int *namelen)
{
m_nState = (id == INVALID_SOCKET ? MStateBase::STATE_CLOSE : MStateBase::STATE_OPEN);
m_sock = id;
m_timeout = 3;
memcpy(&m_peeradd_in,name,*namelen);
memcpy(&m_nLenPeerAddr_in,namelen,sizeof(int));
}
inline bool initsocket(int domain, int type, int protocol);
static int sockettimedread( SOCKET fd, int Sec, int USec );
static int sockettimedwrite( SOCKET fd, int Sec, int USec );
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -