gpt4 book ai didi

windows - 套接字编程更新 : recv returning -1, 错误 = 10053

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

我正在 Windows 7 上实现一个围绕套接字 recv() 调用循环的 TCP/IP 应用程序。对于少量数据(< 5 MB),它工作正常,但对于大数据(> 20 MB),recv 在两者之间失败。

详细信息:我的应用程序需要与运行的 HTTP 服务器进行通信,两者都在同一台机器上运行,在这种情况下,tcp 应用程序正在向 HTTP 服务器发送大量数据

它给出错误 = 2,recv 返回 0。

错误 2 表示 ENOENT,但它是什么意思?。有谁知道这是什么(关于套接字)以及我如何解决这个问题?

msgLen = recv(s,msg,BUFFER_SIZE,0);

if(msgLen > 0)
{
// do processing
}
else
{
printf("\n no data received .... msgLen=%d",msgLen);
printf("\n no data received .... errno=%d",errno);
}

根据评论更新代码

msgLen = recv(s,msg,BUFFER_SIZE,0);

if(msgLen > 0)
{
// do processing
}
else if(msgLen == 0)
{
printf("\n sender disconnected");
}
else
{
printf("\n no data received .... msgLen=%d",msgLen);
printf("\n no data received .... errno=%d",WSAGetLastError());
}

我现在得到的错误是:

  1. 首先,多次recv = 0,即sender断开连接;
  2. 最后,recv 返回 -1,error = 10053。

我的 TCP/IP 应用程序正在向 HTTP 服务器发送数据。同样适用于小数据,但问题来自大量数据。 HTTP 服务器是否超时?

最佳答案

recv()返回0时,表示对方正常断开连接(假设你请求的缓冲区大小不为0)。 recv() 仅在返回 SOCKET_ERROR (-1) 时提供错误代码。在 Windows 上,您必须使用 WSAGetLastError() 来获取错误代码,而不是 errno,例如:

msgLen = recv(s,msg,BUFFER_SIZE,0);

if(msgLen > 0)
{
// do processing
}
else if (msgLen == 0)
{
printf("\n sender disconnected");
}
else
{
printf("\n no data received .... error=%d",WSAGetLastError());
}

另外请记住,如果您使用的是非阻塞套接字,错误代码可能是 WSAEWOULDBLOCK,这不是 fatal error 。您可以使用 select() 检测套接字何时有数据,然后再次尝试 recv()

关于windows - 套接字编程更新 : recv returning -1, 错误 = 10053,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15433380/

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