我正在通过UDP套接字与设备通信。我发送一个命令,然后收到它的响应。消息需要每100毫秒发送一次。我用
设置了接收超时model
其中struct timeval t = {.tv_sec = 0, .tv_usec = 100000};
setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, t, sizeof(t));
是我的套接字文件描述符。一切工作了很长时间,但随后我在fd
调用中开始出现Resource temporarily unavailable
错误。据我了解,这是因为接收缓冲区中没有任何内容。我期望在下一次迭代中缓冲区将满,但是我仍然得到recvfrom(...)
。换句话说,系统无法恢复。套接字本身,套接字上的设置还是设备有问题吗?
答案 0 :(得分:0)
如果最初获得流量,套接字或其配置应该没有问题。如果是这种情况,您会看到不同的错误消息。
如果您连续仅遇到一次或两次消息,则可能是由于某些网络问题而导致网络延迟或数据包丢失。 (例如,交换机故障,网络连接速度慢等)
如果您始终遇到此消息(每次调用recvfrom),则客户端和服务器之间的连接可能存在问题。我会验证客户端是否仍在发送邮件并检查您的网络连接。