gpt4 book ai didi

c - Linux C 套接字错误 : Input/output error

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:27 36 4
gpt4 key购买 nike

当我尝试将数据发送到 TCP 服务器时,出现“输入/输出错误”错误。就套接字而言,这意味着什么?它基本上与我使用的相同代码总是工作正常。我希望有人能告诉我当我尝试通过套接字发送时输入/输出错误的原因是什么以及我如何检查/修复它们。感谢您的帮助。

struct SOCKETSTUS {
int sendSockFd;
int recvSockFd;
short status;
long heartBeatSendTime;
long heartBeatRecTime;
long loginPackSendTime;
};

struct SOCKETSTUS sockArr[128];

if (tv.tv_sec - sockArr[i].heartBeatSendTime >= beatTim)
{
if (send(sockArr[i].sendSockFd, szBuffer, packetSize, 0) != packetSize)
{
fprintf(stderr, "Heartbeat package send failed:[%d][%s]\n", errno, strerror(errno));
if (errno == EBADF || errno == ECONNRESET || errno == ENOTCONN || errno == EPIPE)
{
Debug("link lose connection\n"); Reconn(i); continue;
}
}
else
{
sockArr[i].heartBeatSendTime = tv.tv_sec;
if (sockArr[i].status == SOCK_IN_FLY)
sockArr[i].heartBeatRecTime = tv.tv_sec;
}
}

错误发生在 send() 调用中。

最佳答案

您的错误检查不正确。 send() 返回发送的字节数或 -1 出错。您只检查返回值是否等于 packetSize返回值指示错误。 Sometimes send() on a stream socket will return fewer bytes than requested .

所以,之前的一些系统调用(也许是一个无害的失败 tty 操作?一个狡猾的信号处理程序?)将 errno 设置为 EIO。

更改您的代码以将 -1 与“短”发送不同。

关于c - Linux C 套接字错误 : Input/output error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16849080/

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