使用setsockopt()和select()设置UDP超时

使用setsockopt()和select()设置UDP超时,select,udp,timeout,setsockopt,Select,Udp,Timeout,Setsockopt,我知道这两种方法都可以用来设置recvfrom()的超时,但哪一种更好?直观地说,setsockopt似乎使用起来很简单,但我发现许多示例都使用select()。我只使用一个套接字,在传输过程中会重新计算超时时间(我使用的是Ubuntu)。这取决于您希望使用它的确切要求/场景 通常,选择允许您同时监视多个套接字。如果您的设计有多个插座,则首选使用select。但是,如果您只打算使用一个套接字,那么将timeout(SO_RCVTIMEO)与setsockopt一起使用是一个更好的选项。这取决于您

我知道这两种方法都可以用来设置recvfrom()的超时,但哪一种更好?直观地说,setsockopt似乎使用起来很简单,但我发现许多示例都使用select()。我只使用一个套接字,在传输过程中会重新计算超时时间(我使用的是Ubuntu)。

这取决于您希望使用它的确切要求/场景


通常,选择允许您同时监视多个套接字。如果您的设计有多个插座,则首选使用select。但是,如果您只打算使用一个套接字,那么将timeout(SO_RCVTIMEO)与setsockopt一起使用是一个更好的选项。

这取决于您希望使用它的确切要求/场景


通常,选择允许您同时监视多个套接字。如果您的设计有多个插座,则首选使用select。但是,如果您只打算使用一个套接字,那么将超时(SO_RCVTIMEO)与setsockopt一起使用是一个更好的选择。

您可以分享一些关于您希望使用这些套接字的确切超时情况的其他信息吗?我相信有些平台(例如Solaris)不支持
,因此_RCVTIMEO
,因此,
select()
是您唯一的选择。您可以分享一些关于您希望在其中使用的超时情况的其他信息吗?一些平台,例如Solaris,我相信不支持
,因此,
select()
是您唯一的选择。如果我使用setsockopt,如何取消设置recvfrom()保持阻塞的超时?您可以通过将秒和微秒配置为零来禁用超时。如果使用setsockopt,如何取消设置recvfrom()保持阻塞的超时?您可以通过将秒和微秒配置为零来禁用超时。