我正在使用this代码来实现客户端 - 服务器架构。代码运行简单,没有任何问题。但是,TCP会将大数据包分成多个较小的数据包。问题来自recv功能。我对Windows编程很陌生,想知道是否有像read函数一样阻塞,直到它从客户端套接字读取所有N个字节(当你想从客户端套接字fd读取时,它在Linux中)。有什么想法吗?
答案 0 :(得分:3)
Windows recv
documentation列出一个MSG_WAITALL
标志,该标志将使调用等待,直到给定的缓冲区完全填满:
<强> MSG_WAITALL 强> 只有在发生以下事件之一时,接收请求才会完成:
- 来电者提供的缓冲区已满。
- 连接已关闭。
- 请求已取消或发生错误。
示例:
iResult = recv(ConnectSocket, recvbuf, recvbuflen, MSG_WAITALL);