gpt4 book ai didi

c - 如果服务器关闭,则阻止 recv 调用挂起

转载 作者:太空狗 更新时间:2023-10-29 17:17:05 25 4
gpt4 key购买 nike

另一个套接字问题。

在我的客户端代码中,我正在发送一些数据包并期待来自服务器端的一些响应:


发送()

recv() <-- 它正在阻塞

在 send() 之后,服务器立即崩溃并自行重启。与此同时,recv() 正在等待。但即使在服务器启动后,接收调用也会挂起。我添加了 SIGPIPE 信号处理,但它仍然无法识别套接字已损坏。

当我取消操作时,我收到来自 recv() 的错误,中断已发出。

谁能帮我纠正这个错误?

这是在 Solaris 机器上运行的共享库中。

最佳答案

也许您应该设置超时延迟以管理这种情况。这可以通过使用 setsockopt 并在套接字上设置 SO_RECVTIMEO 标志轻松完成:

  struct timeval tv;
tv.tv_sec = 30;
tv.tv_usec = 0;
if (setsockopt(socket_fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof tv))
{
perror("setsockopt");
return -1;
}

另一种可能性是使用非阻塞套接字并使用 poll(2) 或 select(2) 管理读/写内容。你应该看看 Beej's Guide to Network Programming .

关于c - 如果服务器关闭,则阻止 recv 调用挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2245470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com