C/C++網絡編程在windows和linux中將socket設置爲阻塞和非阻塞

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

更多的資料也能夠關注我51CTO上的視頻課程編程

夏老師的課堂 http://edu.51cto.com/lecturer/12016059.html
windows


C++socket網絡編程大全實戰http服務器(支持php)視頻課程    

http://edu.51cto.com/index.php?do=lesson&id=153268服務器

相關文章
相關標籤/搜索