套接字recv()使用MSG_WAITALL挂在大消息上

套接字recv()使用MSG_WAITALL挂在大消息上,第1张

套接字recv()使用MSG_WAITALL挂在大消息

MSG_WAITALL
应该
阻塞,直到收到所有数据。在recv的手册页中:

该标志请求 *** 作块,直到满足完整请求为止。

但是,网络堆栈中的缓冲区可能不够大,无法容纳所有内容,这就是服务器上出现错误消息的原因。客户端网络堆栈根本无法容纳那么多数据。

解决方案是增加缓冲区大小(的

SO_RCVBUF
选项
setsockopt
),将消息拆分为较小的片段,或接收较小的块将其放入您自己的缓冲区中。最后是我的建议。

编辑: 我在您的代码中看到您已经按照我的建议进行 *** 作(使用自己的缓冲读取较小的块),因此只需删除该

MSG_WAITALL
标志即可。

哦,当

recv
返回零时,意味着另一端已关闭连接,您也应该这样做。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5046447.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存