| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> linux socket write()函数阻塞卡住线程问题(线程无法结束)write()非阻塞代码 -> 正文阅读 |
|
[系统运维]linux socket write()函数阻塞卡住线程问题(线程无法结束)write()非阻塞代码 |
文章目录1、参考文章:C++网络通信中write和read的为什么会阻塞现在要搞明白,如何让调用write()函数的时候,先让它去判断发送缓冲区(send buffer)满了没,如果满了,就跳过; 不过这里是不是讲得不太对?遇到换行符的话,也能直接发吧?不用存满? 2、参考文章:网络编程(24)—— linux中write和read函数的阻塞试验意思说是除了socket描述符之外,其余的文件描述符都是非阻塞的 找write非阻塞代码1(这文章不错,可以转载过来) 对于阻塞Socket而言,如果发送缓冲区没有空间或者空间不足的话,write操作会直接阻塞住,如果有足够空间,则拷贝所有数据到发送缓冲区,然后返回. 对于写操作write,原理和read是类似的,非阻塞socket在发送缓冲区没有空间时会直接返回错误号EWOULDBLOCK,表示没有空间可写数据,如果错误号是别的值,则表明发送失败。如果发送缓冲区中有足够空间或者是不足以拷贝所有待发送数据的空间的话,则拷贝前面N个能够容纳的数据,返回实际拷贝的字节数。 非阻塞的write操作一般写法是:
不过上面代码貌似不对啊,怎么看起来像是windows的。。。。 2服务器编程心得(四)—— 如何将socket设置为非阻塞模式 - 张小方的文章 - 知乎 3这篇讲得比较透彻 找了半天找不到代码。。。。。 我的代码10 一开始我写了个这样的非阻塞write代码
但是发现,我这边日志全部都显示一次就发完了,这是因为缓冲区远远大于需要发送的消息的原因? 我决定改发到我的ubuntu看看内容正不正常? 改好了,发送到ubuntu上的数据貌似是正常的哎。。。 1 去掉循环write
接下来就是测试看有没有什么问题 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 15:19:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |