⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpsocket.h.bak

📁 网络socket,IO,线程池
💻 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 + -