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

📄 ddksocket.h

📁 mod_RSsim
💻 H
字号:
// DDKSocket.h: interface for the CDDKSocket class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DDKSOCKET_H__9CB02237_FD74_4292_987A_BA0AB6CB65F2__INCLUDED_)
#define AFX_DDKSOCKET_H__9CB02237_FD74_4292_987A_BA0AB6CB65F2__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//Polled Socket config states
#define SOCKET_UNCONFIGURED         0    // Used by logic
#define SOCKET_HEALTHY              1    // connection was ok at last check
#define SOCKET_UNHEALTHY            2    // connection maybe bad
#define SOCKET_INITIALISED          3    // connected

// server thread states
#define SOCKET_EX_PENDING	       0
#define SOCKET_EX_SUSPENDED       1
#define SOCKET_EX_RUNNING	       2
#define SOCKET_EX_TERMINATE       3
#define SOCKET_EX_TERMINATED      4

#define SOCKETCURRENTLY_VOID        0
#define SOCKETCURRENTLY_LISTENING   1
#define SOCKETCURRENTLY_READING     2
#define SOCKETCURRENTLY_WRITTING    3
#define SOCKETCURRENTLY_CLOSING     4
#define SOCKETCURRENTLY_IDLE        5


class CDDKSocket : public CObject
{
public:
   CDDKSocket();
	CDDKSocket(DWORD timeout);  // create connect (client) socket
	virtual ~CDDKSocket();

   // diagnostic
#ifdef _DEBUG
   VOID Dump(CDumpContext& dc) const;
#endif
   
   void GetSockError(CHAR * errString, BOOL reset=TRUE);
   LONG Recieve(SOCKET ackSock, //The accepted socket
                int    numberOfBytesToRead,// -> number of bytes to read.
                CHAR * BufferPtr,       //<- Data read from socket    
                CHAR * debugStrPtr       //Any errors 
               );
   LONG Send(SOCKET ackSock, //The accepted socket
               int    numberOfBytesToWrite,// -> number of bytes to write
               CHAR * BufferPtr,       //<- Data read from socket    
               CHAR * debugStrPtr       //Any errors 
              );
   
   // overridable notification functions
   virtual void SockStateChanged(DWORD state);
   virtual void SockDataDebugger(const CHAR * buffer, LONG length, BOOL transmit);
   virtual void SockDataMessage(LPCTSTR msg);

   BOOL  CloseSocket(BOOL gracefully =FALSE, SOCKET sock = NULL);

	// data
   SOCKET			   m_socket;
   SOCKET          * m_pSocket;         // pointer to the real socket
	DWORD             m_socketStatus;                 
	SOCKADDR_IN       m_destSockaddr_in; //socket plc/destination ip address
	SOCKADDR_IN       m_localSockaddr_in;
//	fd_set            m_socket_fd_set;
   struct protoent   * m_ppe;                    // pointer to protocol information entry
	WORD			      m_wVersionRequested;      //Winsock dll version support var
	WSADATA           m_WSAData;                //winsock data struc     
   INT				   m_sockoptEnable;  
   BOOLEAN           m_serverObject;
   CHAR              * m_buffer;
   WORD              m_serverBufferSize;

protected:
	// methods
	void EnterWSA();
	void LeaveWSA();
   void Initialize();

   UINT friend SockAsyncFriend(LPVOID pParam);

   // data
   BOOL (*m_CallBackFuncPtr)(CHAR        *buffer, //-> rx'd message <- tx message to reply with
                           WORD        *bufSize,//-> rx size      <- tx size
                           SOCKADDR_IN *ip      //-> Plc ip address! 
                          );

   //HANDLE             m_hListenThread;             //Handle to exceptional read thread
   //DWORD              m_dwListenThreadID;          //
   CWinThread *       m_pWorkerThread;
   WORD               m_listenThreadStatus;        //
   BOOL               m_listenThreadCreated;       //is listen thread created.


	static BOOLEAN m_wsaInitialized;
	static CRITICAL_SECTION	m_wsaCS;
	static CRITICAL_SECTION	*m_pwsaCS;

   DECLARE_DYNAMIC(CDDKSocket)
//   DECLARE_DYNCREATE(CDDKSocket)
};

#define wsaerrno (WSAGetLastError() - WSABASEERR)

static char *sys_wsaerrlist[] = {

	"","","","","","","","","","","","","","","","","","",	/* 0  - 17 */
	"","","","","WSAEINVAL","","","","","","","","","","","","",	/* 18 - 34 */
	
	/* non-blocking and interrupt i/o */

	"Operation would block",		/* WSAEWOULDBLOCK - 35 */
	"Operation now in progress",		/* WSAEINPROGRESS - 36 */
	"Operation already in progress",	/* WSAEALREADY    - 37 */

	/* ipc/network software */ 

		/* argument errors */

	"Socket operation on non-socket",	/* WSAENOTSOCK    - 38 */
	"Destination address required",		/* WSAEDESTADDRREQ- 39 */
	"Message too long",			/* WSAEMSGSIZE    - 40 */
	"Protocol wrong type for socket",	/* WSAEPROTOTYPE  - 41 */
	"Protocol not available",		/* WSAENOPROTOOPT - 42 */
	"Protocol not supported",		/* WSAEPROTONOSUPPORT - 43 */
	"Socket type not supported",		/* WSAESOCKTNOSUPPORT - 44 */
	"Operation not supported on socket",	/* WSAEOPNOTSUPP  - 45 */
	"Protocol family not supported",	/* WSAEPFNOSUPPORT- 46 */
	"Address family not supported by protocol family",	
						/* WSAEAFNOSUPPORT- 47 */       
	"Address already in use",		/* WSAEADDRINUSE  - 48 */ 
	"Can't assign requested address",	/* WSAEADDRNOTAVAIL-49 */

   		/* operational errors */

	"Network is down",			/* WSAENETDOWN    - 50 */ 				
	"Network is unreachable",		/* WSAENETUNREACH - 51 */
	"Network dropped connection on reset",	/* WSAENETRESET   - 52 */
	"Software caused connection abort",	/* WSAECONNABORTED- 53 */
	"Connection reset by peer",		/* WSAECONNRESET  - 54 */
	"No buffer space available",		/* WSAENOBUFS     - 55 */
	"Socket is already connected",		/* WSAEISCONN     - 56 */
	"Socket is not connected",		/* WSAENOTCONN    - 57 */
	"Can't send after socket shutdown",	/* WSAESHUTDOWN   - 58 */
	"Too many references: can't splice",	/* WSAETOOMANYREFS- 59 */
	"Connection timed out",			/* WSAETIMEDOUT   - 60 */
	"Connection refused",			/* WSAECONNREFUSED- 61 */
	"Too many levels of symbolic links",	/* WSAELOOP	  - 62 */
	"File name too long",			/* WSAENAMETOOLONG- 63 */
	"Host is down",				/* WSAEHOSTDOWN   - 64 */
	"No route to host",			/* WSAEHOSTUNREACH- 65 */
	"Directory not empty",			/* WSAENOTEMPTY   - 66 */

	/* quotas & mush */

	"Too many processes",			/* WSAEPROCLIM    - 67 */
	"Too many users",			/* WSAEUSERS      - 68 */
	"Disc quota exceeded",			/* WSAEDQUOT      - 69 */
	"Stale file handle",			/* WSAESTALE	  - 70 */
	"Remote file system not responding"	/* WSAEREMOTE     - 71 */
};


#endif // !defined(AFX_DDKSOCKET_H__9CB02237_FD74_4292_987A_BA0AB6CB65F2__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -