前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >socket在windows和Linux下的区别

socket在windows和Linux下的区别

作者头像
老白
发布2018-03-19 16:04:28
2.9K0
发布2018-03-19 16:04:28
举报
文章被收录于专栏:架构之路

1)头文件  windows下winsock.h/winsock2.h  linux下sys/socket.h    错误处理:errno.h  2)初始化  windows下需要用WSAStartup

WSADATA wsaData;

        err = WSAStartup(0x202,&wsaData); if ( err != 0 ) { return 0; } else if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) //检测是否支持这个版本的socket { WSACleanup( ); return 0; }

对应的退出清理用WSACleanup( ); linux下不需要  3)关闭socket  windows下closesocket(...)  linux下close(...)  4)socket类型  windows下SOCKET  linux下int  5)获取错误码  windows下WSAGetLastError() 

linux下errno变量

extern int errno;         int geterror(){return errno;} 6)设置非阻塞  windows下ioctlsocket(server_socket,FIONBIO,&ul);     int ul = 1 linux下fcntl(server_socket,F_SETFL, O_NONBLOCK);    <fcntl.h> 

7)send函数最后一个参数  windows下一般设置为0  linux下必须是后几个参数用到的socket中,值最大的数(整型)加1 (另一种说法是设置为MSG_NOSIGNAL)

8)毫秒级时间获取  windows下GetTickCount()  linux下gettimeofday() 

9)编译连接

windows下ws2_32.lib linux下

连接是使用参数:-lstdc         运行时需要libstdc++.so.5,可在/usr/lib目录中创建一个链接。

10)Socket操作错误返回值

都为SOCKET_ERROR,他的值是-1

11)异常处理

windows下没有对send()的异常处理,最后一个参数无效,写0就可以了。

linux下

当连接断开,还发数据的时候,不仅send()的返回值会有反映,而且还会像系统发送一个异常消息,如果不作处理,系统会出BrokePipe,程序会退出。为此,send()函数的最后一个参数可以设置MSG_NOSIGNAL,禁止send()函数向系统发送异常消息。

12)WSA宏

windows下WSA相关的操作

linux下WSA相关的操作在Linux不必要,直接去掉即可

3、多线程  多线程: (win)process.h --〉(linux)pthread.h  _beginthread --> pthread_create  _endthread --> pthread_exit

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-10-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档