您的位置:首页 > 运维架构 > Linux

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

2013-07-03 11:31 267 查看
有一个非常有迷惑性的做法是:

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竟然还是阻塞的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: