recv和超时问题



1)阻塞和非阻塞套接字的返回值的含义有区别吗?有时recv()返回0,甚至select()在AND之前成功,另一端的对等方没有像文档中所说的那样关闭连接的一半。这是真的吗?

来自osx和win的文档:"对于TCP套接字,返回值0意味着对等方已经关闭了连接的一半。"

2) 关于阻塞套接字的问题:在阻塞套接字上,我希望SO_RCVTIMEO和SO_SNDTIMEO的默认值设置为30秒(使用getsockopt检查)。为什么它们设置为0?

1) 阻塞和非阻塞套接字的返回值的含义有区别吗?

没有。然而,可能的errno/WSAGetLastError()值存在差异,因为非阻塞模式将EAGAIN/EWOULDBLOCK添加到这些可能性中。

有时recv()返回0,甚至select()在AND之前成功,另一端的对等方没有像文档中所说的那样关闭连接的一半。这是真的吗?

不,那不是真的。

来自osx和win的文档:"对于TCP套接字,返回值0意味着对等方已经关闭了连接的一半。"

正确。与阻塞或非阻塞无关。没有任何迹象表明你的问题令人困惑。

2) 关于阻塞套接字的问题:在阻塞套接字上,我希望SO_RCVTIMEO和SO_SNDTIMEO的默认值设置为30秒(使用getsockopt检查)。

你的期望是错误的。默认情况下,它们都是零,意味着无限。

为什么它们设置为0?

因为这是默认值。默认情况下没有超时。

相关内容

  • 没有找到相关文章

最新更新