非阻塞方式socket send()返回大小和实际发送大小不一致

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非阻塞方式socket send()返回大小和实际发送大小不一致相关的知识,希望对你有一定的参考价值。

碰到一个网络问题,发现tcp方式在非阻塞模式下,send的返回大小和实际发送大小不一致,设置增加发送缓冲区大小之后也没有好用,按tcp的理论应该是写到缓冲区,然后tcp自动分片,当缓冲区不够的时候返回实际写入的大小,测试后发现不是这种情况,跪求各位大侠指点一二~~

非阻塞模式是立即返回的,无法保证一次把包发完,所以发送时最好判断发送字节的多少,如果没有发送完成,继续调用发送接口发送 参考技术A 发送的是struct么?注意字节对齐的问题追问

发送的是一块buffer,应该不存在字节对齐的问题

追答

那贴代码吧,贴一部分也行啊

追问

代码贴了一部分,见图片,谢谢

参考技术B 代码贴出来看看追问

代码贴了一部分,见图片,谢谢

以上是关于非阻塞方式socket send()返回大小和实际发送大小不一致的主要内容,如果未能解决你的问题,请参考以下文章

php socket 如何实现非阻塞

linux网络编程中阻塞和非阻塞socket的区别

linux网络编程中阻塞和非阻塞socket的区别

阻塞IO和非阻塞IO

网络编程中阻塞和非阻塞socket的区别

nginx异步非阻塞理解