gpt4 book ai didi

c - TCP : recv() getting ECONNRESET

转载 作者:可可西里 更新时间:2023-11-01 02:34:52 25 4
gpt4 key购买 nike

我正在尝试使用 TCP 在 Linux 上实现一个简单的客户端/服务器程序和标准的 socket.h 库。服务器处理多个客户端,每个客户端都可以随时关闭()或关闭()套接字。

在服务器端(使用非阻塞读取):

int nBytes;
if ((nBytes = recv(socket, buffer, BUFFER_SIZE, MSG_DONTWAIT)) == -1)
{
if (errno != EAGAIN && errno != EWOULDBLOCK)
{
//print to log
}

}
if (nBytes == 0)
{

//other side closed the connection
}

我正在让 recv() 返回 -1 并将错误设置为 ECONNRESET。如果客户端关闭了连接,recv() 不应该返回 0 吗?

最佳答案

原因有很多,包括但不限于:

  • 对方故意重置连接
  • 对等方在他仍有未读数据待处理时关闭了连接
  • 您已将数据发送到已被对等方关闭的连接
  • 您有待处理的写入数据并且 TCP 重试已超时
  • TCP keepalive 检测到丢失的连接。

这是一个 fatal error ,当你得到它时你应该关闭套接字。

each client can close() or shutdown() the socket any time he wants.

不,他不能。见上文。

关于c - TCP : recv() getting ECONNRESET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35093071/

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