浙江省高等学校教师教育理论培训

微信搜索“毛凌志岗前心得”小程序

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

将socket设置为非阻塞(non-blocking) - 艾子的日志 - 网易博客

将socket设置为非阻塞(non-blocking)   

2011-02-17 22:36:51|  分类: 默认分类 |  标签:  |字号 订阅

有一个非常有迷惑性的做法是:
u_long has = 1;
ioctl(m_sock, FIONBIO , &has);
这个函数会非常无耻的返回你success,但是它实际上很可能什么也没做。

正确的做法应该是使用fcntl:
int flags = fcntl(m_sock, F_GETFL, 0);
fcntl(m_sock, F_SETFL, flags|O_NONBLOCK);

这真是一个隐蔽的问题,折腾了我两天。线程每每停留在send()调用那里,我始终没怀疑到:用ioctl设置FIONBIO成功之后,socket竟然还是阻塞的。
posted on 2013-01-12 16:19  lexus  阅读(448)  评论(0编辑  收藏  举报