gpt4 book ai didi

c - 重新连接服务器后如何修复 EPIPE

转载 作者:行者123 更新时间:2023-11-30 15:14:39 26 4
gpt4 key购买 nike

我有一个 C socket 客户端程序,其中一个线程用于接收数据,另一个用于发送。如果服务器关闭,则发送者会收到EPIPE。如果我重新连接同一个套接字,那么它可以接收数据,但发送者仍然会收到EPIPE

如何解决这个问题?

更新:实际上,当我看到发送的字节数时,发送方似乎正在发送数据。但 errno 仍然设置为损坏的管道。之前我只检查了 errno。不是应该改成成功吗?

最佳答案

If I reconnect the same socket then it can receive data but the sender still gets EPIPE.

这只能意味着发送方仍在通过旧套接字发送;另外你还没有关闭旧的套接字。

sender seems to send data as I see number of byte sent. But errno is still set to broken pipe. Before I only checked errno. Shouldn't it be changed to successful?

没有。仅当前一个系统调用返回 -1 时,检查 errno 才有效。示例:

int rc = send(...);
if (rc < 0)
{
if (errno == EWOULDBLOCK) // or EAGAIN *and* we are in non-blocking mode
{
// queue the write and return to the select() loop
}
else
{
perror("send"); // for example
}
}
else
{
// write succeeded ...
}

关于c - 重新连接服务器后如何修复 EPIPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33991051/

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