【发布时间】:2018-04-11 12:51:33
【问题描述】:
我发现this answer 了解如何为 posix 套接字设置超时。该答案的 linux 部分:
// LINUX
struct timeval tv;
tv.tv_sec = timeout_in_seconds;
tv.tv_usec = 0;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof tv);
以及来自 posix 文档的引用:
SO_RCVTIMEO设置超时值,该值指定输入函数在完成之前等待的最长时间。它接受一个时间值 具有指定秒数和微秒数的结构 限制等待输入操作完成的时间。如果一个 接收操作已经阻塞了这么长时间没有接收 附加数据,它应返回部分计数或 errno 设置为 [EAGAIN] 或 [EWOULDBLOCK] 如果没有接收到数据。这个的默认值 选项为零,表示接收操作不应 暂停。此选项采用 timeval 结构。请注意,并非所有 实现允许设置此选项。
我不明白的是:这会导致丢失 udp 包吗? 如果收到 udp 包时超时怎么办?
还相关:setting timeout for recv fcn of a UDP socket
PS:我知道 UDP 本质上是不可靠的,所以我的问题实际上主要是关于在处理 udp 消息时发生超时的情况。
【问题讨论】: