最近写一个项目,需要在Linux 和 Windows 两个主要平台编写网络Socket,找了一下没有兼容库,所以查找了一下这两个平台的Socket的一些区别,方便移植的用。
1、头文件:
#include <winsock.h> or #include <winsock2.h>
#include <sys/socket.h>
- 添加#program comment(lib,"Ws2.lib")
- 默认windows.h文件会包含winsock.h,当你包含winsock2.h就会冲突。要解决这个问题,需要首先包含winsock2.h,然后再包括windows.h,要注意包含的顺序。
2、socket初始化与关闭:
Windows需要 WSAStartup(),closesocket(...)函数
Linux不需要初始化,结束socket用close(...)
3、类型声明:
SOCKET
int
- 在Windows里将SOCKET宏定义成unsigned int
4、错误返回码:
windows下getlasterror()/WSAGetLastError()/SOCKET_ERROR
linux下errno变量
- SOCKET_ERROR=-1<