将socket设置为非阻塞(non-blocking) - 艾子的日志 - 网易博客
2013-01-12 16:19
288 查看
将socket设置为非阻塞(non-blocking) - 艾子的日志 - 网易博客
有一个非常有迷惑性的做法是:
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竟然还是阻塞的。
将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竟然还是阻塞的。
相关文章推荐
- 将socket设置为非阻塞(non-blocking)(
- [linux] 将socket设置为非阻塞(non-blocking)
- [linux] 将socket设置为非阻塞(non-blocking)
- [linux] 将socket设置为非阻塞(non-blocking)
- [linux] 将socket设置为非阻塞(non-blocking)
- 关于 socke t设置为非阻塞(non-blocking)状态
- socket的send、recv阻塞设置阻塞超时时间
- [转]socket的send、recv阻塞设置阻塞超时时间
- 非阻塞IO(nonblocking I/O)
- [网络编程]_[Socket]_[Socket 阻塞模式(blocking)下的 I/O模型(model) 之 Select 模型(model)初探]
- 设置非阻塞socket及使connect调用超时
- [VC]setsockopt 设置socket 详细用法(超时、非阻塞等)
- socket Non-blocking连接
- socket 设置非阻塞
- 非阻塞套接字(Nonblocking Sockets) 概述
- (笔记)Socket设置非阻塞方式
- 设置socket为非阻塞
- socket的send、recv阻塞设置阻塞超时时间
- Socket overlapped I/O versus blocking/nonblocking mode
- 非阻塞套接字(Nonblocking Sockets) 概述