[linux] 将socket设置为非阻塞(non-blocking)
2006-07-24 19:06
513 查看
有一个非常有迷惑性的做法是:
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竟然还是阻塞的。
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竟然还是阻塞的。
相关文章推荐
- [linux] 将socket设置为非阻塞(non-blocking)
- [linux] 将socket设置为非阻塞(non-blocking)
- [linux] 将socket设置为非阻塞(non-blocking)
- 将socket设置为非阻塞(non-blocking) - 艾子的日志 - 网易博客
- 将socket设置为非阻塞(non-blocking)(
- unix/linux socket设置非阻塞
- unix/linux socket设置非阻塞
- Linux下socket设置为非阻塞方式和fcntl系统调用
- socket设置为非阻塞方式(windows和linux)
- unix/linux socket设置非阻塞
- unix/linux socket设置非阻塞io
- linux网络编程:设置非阻塞socket收发数据
- Linux下socket设置为非阻塞方式和fcntl系统调用
- C++编程:socket设置为非阻塞方式(windows和linux)1
- Linux下socket设置为非阻塞方式和fcntl系统调用
- linux网络编程:设置非阻塞socket收发数据
- linux下将socket设置为非阻塞的方法
- Linux下socket设置为非阻塞方式和fcntl系统调用
- socket设置为非阻塞方式(windows和linux)
- window和linux下,设置socket为阻塞模式