0

在 winsock 中,只要流套接字中有可用数据,同步recv和异步都会完成,而不管指定的大小(这只是上限)。WSARecv这意味着为了从流中读取固定数量的字节,应该应用一些自定义缓冲。并且除非每次读取都单独缓冲,否则会导致双缓冲,即每个套接字实际上有两个缓冲区。

有没有办法让winsock代表它自己缓冲数据,并且只有在指定的字节数可用时才完成操作(除非发生错误)?

编辑:这个功能应该特别适用于异步套接字。

4

1 回答 1

4

对于同步套接字,您应该能够将 MSG_WAITALL 标志传递给 recv,这将阻塞直到您的缓冲区已满或出现错误/断开连接。

关于重叠的io,那不是真的。您唯一真正的选择是缓冲数据。不过,您实际上并不需要两个缓冲区;您可以使用相同的缓冲区,只需传递缓冲区+最后一次读取结束的偏移量,直到缓冲区被填满。

于 2009-11-15T22:34:05.453 回答