强制recv(Windows C ++)函数阻塞,直到读取N个字节

时间:2015-11-29 01:40:17

标签: c++ windows tcp client-server

我正在使用this代码来实现客户端 - 服务器架构。代码运行简单,没有任何问题。但是,TCP会将大数据包分成多个较小的数据包。问题来自recv功能。我对Windows编程很陌生,想知道是否有像read函数一样阻塞,直到它从客户端套接字读取所有N个字节(当你想从客户端套接字fd读取时,它在Linux中)。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

Windows recv documentation列出一个MSG_WAITALL标志,该标志将使调用等待,直到给定的缓冲区完全填满:

  

<强> MSG_WAITALL   只有在发生以下事件之一时,接收请求才会完成:

     
      
  • 来电者提供的缓冲区已满。
  •   
  • 连接已关闭。
  •   
  • 请求已取消或发生错误。
  •   

示例:

iResult = recv(ConnectSocket, recvbuf, recvbuflen, MSG_WAITALL);