Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在尝试TIMEOUT在我的 UDP 停止等待中实现该功能。也就是说,我ACK故意让我的接收者不发送,并期望发送者在TIMEOUT.
TIMEOUT
ACK
但是,正如recvfrom文档所说:
如果套接字上没有可用的消息,则接收调用会等待消息到达,除非套接字是非阻塞的。
所以我的发送者和接收者都卡在sendto()and recvfrom()。他们都挂了!最有办法让我可以让代码继续运行,从而实现TIMEOUT.
sendto()
recvfrom()
我该怎么做?
看看函数select poll和epoll。他们可以帮助超时。在等待多个文件描述符(套接字)时,它们也非常有用
select
poll
epoll
通过函数设置SO_RCVTIMEO选项。setsockopt()然后,如果超时触发,recvfrom()将返回 -1 并errno设置为EAGAINor EWOULDBLOCK。
SO_RCVTIMEO
setsockopt()
errno
EAGAIN
EWOULDBLOCK