C/C++网络编程在windows和linux中将socket设置为阻塞和非阻塞
2017-03-22 08:41
507 查看
C/C++网络编程在windows和linux中将socket设置为阻塞和非阻塞 在 socket编程中,对于socket的读写默认都是阻塞的,但有的情况我们需要将其设置为非阻塞,比如做多路复用,或者通过select实现连接超时等功能,将socket设置为非阻塞,在windows和linux中的接口有所不同,在windows中使用ioctlsocket函数,在linux中使用 fcntl函数,下面我们做一个跨平台设置阻塞的函数SetBlock。
更多内容可以到网上搜索“夏曹俊”获取我的课程
更多的资料也可以关注我51CTO上的视频课程
夏老师的课堂 http://edu.51cto.com/lecturer/12016059.html
http://edu.51cto.com/index.php?do=lesson&id=153268
bool SetBlock(int sock,bool isblock) { int re = 0; //通过宏区分windows和linux,如果是windows64位程序判断 _WIN64宏 #ifdef WIN32 unsigned long ul = 0; if(!isblock) ul = 1; re = ioctlsocket(sock, FIONBIO, (unsigned long*)&ul); #else //先取到现有描述符属性,保证本次更改不变动原有属性 int flags = fcntl(sock, F_GETFL, 0); if (flags < 0) { return false; } if(isblock) { flags = flags & ~O_NONBLOCK; } else { flags = flags | O_NONBLOCK; } re = fcntl(sock, F_SETFL, flags); #endif if (re != 0) return false; return true; }
更多内容可以到网上搜索“夏曹俊”获取我的课程
更多的资料也可以关注我51CTO上的视频课程
夏老师的课堂 http://edu.51cto.com/lecturer/12016059.html
http://edu.51cto.com/index.php?do=lesson&id=153268
相关文章推荐
- [置顶] C/C++网络编程在windows和linux中将socket设置为阻塞和非阻塞
- C++编程:socket设置为非阻塞方式(windows和linux)1
- linux c++ socket 网络编程(2) select 异步非阻塞
- socket设置为非阻塞方式(windows和linux)
- socket设置为非阻塞方式(windows和linux)
- socket设置超时的linux和windows区别
- unix/linux socket设置非阻塞
- [linux] 将socket设置为非阻塞(non-blocking)
- socket C/C++编程(3)Windows&Linux之socket兼容性编程
- Linux下socket设置为非阻塞方式和fcntl系统调用
- Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码(用socket解释http,不错)
- unix/linux socket设置非阻塞
- linux下将socket设置为非阻塞的方法
- Linux UDP socket 设置为的非阻塞模式与阻塞模式区别
- unix/linux socket设置非阻塞io
- window和linux下,设置socket为阻塞模式
- [linux] 将socket设置为非阻塞(non-blocking)
- Linux下socket设置为非阻塞方式和fcntl系统调用
- [linux] 将socket设置为非阻塞(non-blocking)
- Linux下socket设置为非阻塞方式和fcntl系统调用