【发布时间】:2011-01-18 17:44:27
【问题描述】:
recv() 库函数手册页提到:
它返回接收到的字节数。它通常返回任何可用的数据,直到请求的数量,而不是等待收到请求的全部数量。
如果我们使用阻塞 recv() 调用并请求 100 字节:
recv(sockDesc, buffer, size, 0); /* Where size is 100. */
如果服务器只发送 50 个字节,那么这个 recv() 会被阻塞,直到 100 个字节可用,否则它将返回接收 50 个字节。
情况可能是这样的:
仅发送 50 个字节后服务器崩溃
-
糟糕的协议设计,服务器只发送 50 个字节,而客户端期待 100 个字节,服务器也在等待客户端的回复(即,recv 将返回的服务器尚未启动套接字关闭连接)
我对 Linux / Solaris 平台感兴趣。我没有开发环境自己去看看。
【问题讨论】: