【问题标题】:Recvfrom() is hanging -- how to deal this when Server is OFFRecvfrom() 挂起 - 服务器关闭时如何处理
【发布时间】:2011-08-26 14:11:51
【问题描述】:

我的客户端代码使用 UDP 和 recvfrom() 从服务器获取响应。当服务器打开时,这工作正常,但是一旦我停止服务器,我的客户端程序就会挂起;我怀疑 recvfrom() 正在等待服务器的响应。

如果服务器和客户端都安装在同一个系统上,那么当服务器关闭时,我会收到来自recvfrom() 的错误,但是当服务器和客户端在不同的系统上时,客户端会在 recvfrom() 处挂起关闭后服务器没有响应。

请有人可以告诉我如何处理这种情况,也许定时器信号中断可以解决这个问题.. 任何人都可以对此有所了解吗?

我正在使用 Visual Studio 2005。

【问题讨论】:

    标签: c++ visual-c++ client-server


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 2011-12-14
    • 1970-01-01
    • 2015-06-11
    • 2010-11-27
    • 1970-01-01
    • 2016-07-11
    • 2012-07-09
    • 2011-01-15
    • 2013-05-13
    相关资源
    最近更新 更多