📄 skfwd.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 + -