C/C++网络编程在windows和linux中将socket设置为阻塞和非阻塞

来源:互联网 发布:火炬之光2 mac 编辑:程序博客网 时间:2024/06/05 06:35

C/C++网络编程在windows和linux中将socket设置为阻塞和非阻塞         

    在 socket编程中,对于socket的读写默认都是阻塞的,但有的情况我们需要将其设置为非阻塞,比如做多路复用,或者通过select实现连接超时等功能,将socket设置为非阻塞,在windows和linux中的接口有所不同,在windows中使用ioctlsocket函数,在linux中使用 fcntl函数,下面我们做一个跨平台设置阻塞的函数SetBlock。

bool SetBlock(int sock,bool isblock){int re = 0;//通过宏区分windows和linux,如果是windows64位程序判断 _WIN64宏#ifdef WIN32unsigned 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);#endifif (re != 0) return false;return true;}
更多内容可以到网上搜索“夏曹俊”获取我的课程
也可以看我在csdn学院的视频课程 夏曹俊
C++socket网络编程大全实战http服务器(支持php)
http://edu.csdn.net/course/detail/4358


1 0
原创粉丝点击