首页 > 编程语言 > 详细

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

时间:2017-03-22 11:49:53      阅读:372      评论:0      收藏:0      [点我收藏+]

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 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/index.php?do=lesson&id=153268

本文出自 “夏曹俊” 博客,谢绝转载!

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

原文:http://xiacaojun.blog.51cto.com/12016059/1909064

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!