admin管理员组文章数量:1613632
windows | linux | |
---|---|---|
头文件 | winsock.h/winsock2.h | sys/socket.h ,netinet/in.h,unistd.h,errno.h, |
初始化 | 需要用WSAStartup启动Ws2_32.lib,并且要用#pragma comment(lib,"Ws2_32")来告知编译器链接该lib, 结束之后要WSAClean | 不需要 |
关闭socket | closesocket(...) | close(...) |
类型 | SOCKET | in |
获取错误码 | getlasterror()/WSAGetLastError() | errno变量 |
设置非阻塞 | flag = 1; ioctlsocket (fd, FIONBIO, (unsigned long *) &flag); | flag = fcntl (fd, F_GETFL); fcntl (fd, F_SETFL, flag | O_NONBLOCK); |
send函数最后一个参数 | 一般设置为0 | 最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可 能会导致程序退出。 |
毫秒级时间获取 | GetTickCount() | gettimeofday() |
多线程 | process.h ; CreateThread/_beginthread; _endthread; | pthread.h; pthread_create; pthread_exit; |
sockaddr_in 结构 | addr_var.sin_addr.S_un.S_addr ,Winsock里最后那个32bit的S_addr也有几个以联合(Union)的形式与它共享内存空间的成员变量(便于以其他方式赋值) | addr_var.sin_addr.s_addr , Linux的Socket没有这个联合,就是一个32bit的s_addr。遇到那种得到了是4个char的IP的形式(比如127一个,0一个,0一个 和1一个共四个char),WinSock可以直接用4个S_b来赋值到S_addr里,而在Linux下,可以用边向左移位(一下8bit,共四下)边 相加的方法赋值。 |
time_t 结构 | windows中,time_t结构是64位的整形。 如果要在windows使time_t为32位无符号整形,可以加宏定义,_USE_32BIT_TIME_T。 | Linux中,time_t结构是长整形。 |
sleep | Sleep的单位为毫秒。 | sleep的单位为秒。 |
snprintf | Windows为_snprintf | Linux为snprintf |
如我用到的一些宏:
#ifdef WIN32
typedef int socklen_t;
typedef int ssize_t;
#endif
#ifdef __LINUX__
typedef int SOCKET;
typedef unsigned char BYTE;
typedef unsigned long DWORD;
#define FALSE 0
#define SOCKET_ERROR (-1)
#endif
版权声明:本文标题:socket在windows下和linux下的区别与移植 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728656551a1168227.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论