博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[linux] 将socket设置为非阻塞(non-blocking)
阅读量:7259 次
发布时间:2019-06-29

本文共 304 字,大约阅读时间需要 1 分钟。

8495人阅读
(9)
有一个非常有迷惑性的做法是:
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竟然还是阻塞的。

转载地址:http://bmodm.baihongyu.com/

你可能感兴趣的文章
Netty+SpringBoot+FastDFS+Html5实现聊天App(五)
查看>>
恕我直言,你可能误解了微服务
查看>>
Conflux吐槽君:IOTA物联网电磁炉-让PoW的耗电没有遗憾
查看>>
Work with Alexa :Echo匹配连接到Alexa
查看>>
使用 Sphinx 撰写技术文档并生成 PDF 总结
查看>>
MongoDB
查看>>
Computed property "XXX" was assigned to but it has no setter
查看>>
敏捷开发: 超级易用水桶估计系统
查看>>
Dojo 如何测试 widget
查看>>
SAP 前端技术的演化史简介
查看>>
聊聊flink的MemoryPool
查看>>
前嗅ForeSpider数据采集中采集列表界面介绍
查看>>
228. Summary Ranges
查看>>
原型链
查看>>
Nervos 双周报第 3 期:佛系新年之后的开工大吉!
查看>>
学习webpack4 - 抽离公共代码
查看>>
不同浏览器下 autoplay 的限制策略和方案的整理
查看>>
聊聊flink的ConnectionManager
查看>>
node.js初体验之利用node.js的fs-文件系统,来写一个批量修改文件名的小工具
查看>>
Promise面试题2实现异步串行执行
查看>>