您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

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

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

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

我在您的代码中看到您已经按照我的建议进行操作(使用自己的缓冲读取较小的块),因此只需删除MSG_WAITALL标志即可。

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

其他 2022/1/1 18:17:06 有530人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶