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

📄 skfwd.h

📁 socket的事件分发模型
💻 H
字号:
#if !defined(SKFWD_H_)
#define SKFWD_H_

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

typedef int HRET;
typedef unsigned short u_short;

#define DUMP1(x,p1)
#define DUMP3(x,p1,p2,p3)

#ifdef _MSC_VER
#define zPLAT_WIN 1
#define zPLAT_POSIX 0
#else
#define zPLAT_WIN 0
#define zPLAT_POSIX 1
#endif

#if zPLAT_WIN
#	include <winsock.h>
#elif zPLAT_POSIX
#	include <unistd.h>
#	include <sys/socket.h>
#	include <netinet/in.h>
#	include <netinet/tcp.h>
#	include <arpa/inet.h>
#	include <netdb.h>
#	include <string.h>
#	include <errno.h>
#	include <sys/poll.h>
#endif	//zPLAT_POSIX

#if zPLAT_WIN

#pragma comment(lib, "wsock32")

inline int get_sock_err(){
	return WSAGetLastError();
}
inline void sock_dump_err(const char* pszTitle_){
	char buf[256];
	FormatMessage( 
		FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL,
		WSAGetLastError(),
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
		buf,
		sizeof(buf),
		NULL 
	);
	DUMP3("error(%d): %s, reason: %s", WSAGetLastError(), pszTitle_, buf);
}
inline void SocketCleanup_(){
	WSACleanup();
}
inline void SocketInit_(){
	WSADATA data;
	if (WSAStartup(MAKEWORD(2, 2), &data) < 0){
		DUMP1("error: Socket startup failed, err: %d.\n", GetLastError());
	}
	atexit(SocketCleanup_);
}

#define SOCKET_INIT()		SocketInit_()
#define SOCKET_CLEANUP()	SocketCleanup_()

typedef int socklen_t;

#elif zPLAT_POSIX

#define closesocket ::close

typedef int SOCKET;
const int INVALID_SOCKET = -1;
const int SOCKET_ERROR = -1;

inline int get_sock_err(){
	return errno;
}
inline void sock_dump_err(const char* pszTitle_){
	DUMP3("error(%d): %s, reason: %s\n", errno, pszTitle_, strerror(errno));
}

#define SOCKET_INIT()
#define SOCKET_CLEANUP()


#endif	//zPLAT_WIN

#if defined(__GNUC__)
typedef socklen_t addrlen_t;
#else
typedef int addrlen_t;
#endif

//	调试底层的SOCKET,打印每个socket调用的错误信息
#ifndef DEBUG_SOCKET
#	define DEBUG_SOCKET 0
#endif

#if zDEBUG && DEBUG_SOCKET
#	define SOCK_DUMP_ERR(pszTitle_)				sock_dump_err(pszTitle_)
#	define SOCK_DUMP_ERR_IF(cond_, pszTitle_)	do{if (cond_){sock_dump_err(pszTitle_);}}while(0)
#else
#	define SOCK_DUMP_ERR(pszTitle_)
#	define SOCK_DUMP_ERR_IF(cond_, pszTitle_)	
#endif

struct SockAddr;
class sockset;
class Socket;

#if zPLAT_WIN
#	define SE_WOULDBLOCK             WSAEWOULDBLOCK
#	define SE_INPROGRESS             WSAEINPROGRESS
#	define SE_ALREADY                WSAEALREADY
#	define SE_NOTSOCK                WSAENOTSOCK
#	define SE_DESTADDRREQ            WSAEDESTADDRREQ
#	define SE_MSGSIZE                WSAEMSGSIZE
#	define SE_PROTOTYPE              WSAEPROTOTYPE
#	define SE_NOPROTOOPT             WSAENOPROTOOPT
#	define SE_PROTONOSUPPORT         WSAEPROTONOSUPPORT
#	define SE_SOCKTNOSUPPORT         WSAESOCKTNOSUPPORT
#	define SE_OPNOTSUPP              WSAEOPNOTSUPP
#	define SE_PFNOSUPPORT            WSAEPFNOSUPPORT
#	define SE_AFNOSUPPORT            WSAEAFNOSUPPORT
#	define SE_ADDRINUSE              WSAEADDRINUSE
#	define SE_ADDRNOTAVAIL           WSAEADDRNOTAVAIL
#	define SE_NETDOWN                WSAENETDOWN
#	define SE_NETUNREACH             WSAENETUNREACH
#	define SE_NETRESET               WSAENETRESET
#	define SE_CONNABORTED            WSAECONNABORTED
#	define SE_CONNRESET              WSAECONNRESET
#	define SE_NOBUFS                 WSAENOBUFS
#	define SE_ISCONN                 WSAEISCONN
#	define SE_NOTCONN                WSAENOTCONN
#	define SE_SHUTDOWN               WSAESHUTDOWN
#	define SE_TOOMANYREFS            WSAETOOMANYREFS
#	define SE_TIMEDOUT               WSAETIMEDOUT
#	define SE_CONNREFUSED            WSAECONNREFUSED
#	define SE_LOOP                   WSAELOOP
#	define SE_NAMETOOLONG            WSAENAMETOOLONG
#	define SE_HOSTDOWN               WSAEHOSTDOWN
#	define SE_HOSTUNREACH            WSAEHOSTUNREACH
#	define SE_NOTEMPTY               WSAENOTEMPTY
#	define SE_PROCLIM                WSAEPROCLIM
#	define SE_USERS                  WSAEUSERS
#	define SE_DQUOT                  WSAEDQUOT
#	define SE_STALE                  WSAESTALE
#	define SE_REMOTE                 WSAEREMOTE
#elif zPLAT_POSIX
#	define SE_WOULDBLOCK             EWOULDBLOCK
#	define SE_INPROGRESS             EINPROGRESS
#	define SE_ALREADY                EALREADY
#	define SE_NOTSOCK                ENOTSOCK
#	define SE_DESTADDRREQ            EDESTADDRREQ
#	define SE_MSGSIZE                EMSGSIZE
#	define SE_PROTOTYPE              EPROTOTYPE
#	define SE_NOPROTOOPT             ENOPROTOOPT
#	define SE_PROTONOSUPPORT         EPROTONOSUPPORT
#	define SE_SOCKTNOSUPPORT         ESOCKTNOSUPPORT
#	define SE_OPNOTSUPP              EOPNOTSUPP
#	define SE_PFNOSUPPORT            EPFNOSUPPORT
#	define SE_AFNOSUPPORT            EAFNOSUPPORT
#	define SE_ADDRINUSE              EADDRINUSE
#	define SE_ADDRNOTAVAIL           EADDRNOTAVAIL
#	define SE_NETDOWN                ENETDOWN
#	define SE_NETUNREACH             ENETUNREACH
#	define SE_NETRESET               ENETRESET
#	define SE_CONNABORTED            ECONNABORTED
#	define SE_CONNRESET              ECONNRESET
#	define SE_NOBUFS                 ENOBUFS
#	define SE_ISCONN                 EISCONN
#	define SE_NOTCONN                ENOTCONN
#	define SE_SHUTDOWN               ESHUTDOWN
#	define SE_TOOMANYREFS            ETOOMANYREFS
#	define SE_TIMEDOUT               ETIMEDOUT
#	define SE_CONNREFUSED            ECONNREFUSED
#	define SE_LOOP                   ELOOP
#	define SE_NAMETOOLONG            ENAMETOOLONG
#	define SE_HOSTDOWN               EHOSTDOWN
#	define SE_HOSTUNREACH            EHOSTUNREACH
#	define SE_NOTEMPTY               ENOTEMPTY
#	define SE_PROCLIM                EPROCLIM
#	define SE_USERS                  EUSERS
#	define SE_DQUOT                  EDQUOT
#	define SE_STALE                  ESTALE
#	define SE_REMOTE                 EREMOTE
#endif


#endif // !defined(SKFWD_H_)
/*
 *	Copyright (c) 2003-2005 Zbchun.
 *	这是一个开源软件,允许任意使用,但必须保留该版权声明。
 */

⌨️ 快捷键说明

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