Recvfrom()挂起——当服务器关闭时如何处理这个问题

Recvfrom() is hanging -- how to deal this when Server is OFF

本文关键字:何处理 处理 问题 挂起 服务器 Recvfrom      更新时间:2023-10-16

我有客户端代码,使用UDP和recvfrom()从服务器获得响应。这是工作很好,当服务器是ON,但一旦我停止服务器我的客户端程序挂起;我怀疑recvfrom()正在等待服务器的响应。

如果服务器和客户端都安装在同一个系统上,当服务器关闭时,我从recvfrom()中得到错误,但是当服务器和客户端在不同的系统上时,客户端挂在recvfrom()处,因为服务器没有响应,因为它关闭。

请有人能给我一个主意,我怎么能处理这种情况,也许一个定时器信号中断可以解决这个问题。有人能解释一下吗?

我正在使用Visual studio 2005.

您的调用阻塞,因为这个套接字现在没有数据。当服务器打开时,它足够快地发送数据,所以recvfrom调用得到它并迅速返回。当服务器关闭时,没有人发送数据,recvfrom永远等待。无论服务器是开还是关,recvfrom在两种情况下都做同样的事情;你只是没有注意到第一种情况下的延迟。

需要使用非阻塞套接字。在非阻塞模式下,recvfrom将在没有数据时返回错误,而不是等待。然后,您可以使用select调用休眠,直到超时发生或数据到达。