C/C++网络编程在windows和linux中将socket设置为阻塞和非阻塞 php
在 socket编程中,对于socket的读写默认都是阻塞的,但有的状况咱们须要将其设置为非阻塞,好比作多路复用,或者经过select实现链接超时等功能,将socket设置为非阻塞,在windows和linux中的接口有所不一样,在windows中使用ioctlsocket函数,在linux中使用 fcntl函数,下面咱们作一个跨平台设置阻塞的函数SetBlock。html
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; }
更多内容能够到网上搜索“夏曹俊”获取个人课程linux