Recvfrom()挂起——当服务器关闭时如何处理这个问题
Recvfrom() is hanging -- how to deal this when Server is OFF
我有客户端代码,使用UDP和recvfrom()
从服务器获得响应。这是工作很好,当服务器是ON,但一旦我停止服务器我的客户端程序挂起;我怀疑recvfrom()正在等待服务器的响应。
如果服务器和客户端都安装在同一个系统上,当服务器关闭时,我从recvfrom()
中得到错误,但是当服务器和客户端在不同的系统上时,客户端挂在recvfrom()处,因为服务器没有响应,因为它关闭。
请有人能给我一个主意,我怎么能处理这种情况,也许一个定时器信号中断可以解决这个问题。有人能解释一下吗?
我正在使用Visual studio 2005.
您的调用阻塞,因为这个套接字现在没有数据。当服务器打开时,它足够快地发送数据,所以recvfrom
调用得到它并迅速返回。当服务器关闭时,没有人发送数据,recvfrom
永远等待。无论服务器是开还是关,recvfrom
在两种情况下都做同样的事情;你只是没有注意到第一种情况下的延迟。
需要使用非阻塞套接字。在非阻塞模式下,recvfrom
将在没有数据时返回错误,而不是等待。然后,您可以使用select
调用休眠,直到超时发生或数据到达。
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 用于矢量处理的多个线程
- 对字符串进行排序时,在c++中处理sort()
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 处理除以零会导致<csignal>意外行为
- 是否可以在c++中处理字符串流中的各个元素
- 在简单的外壳中进行批处理处理