当我尝试向tcp服务器发送数据时,出现“输入/输出错误”错误。这对套接字来说意味着什么?它基本上相同的代码我一直使用正常。我希望有人能告诉我,当我试图通过套接字发送以及如何检查/修复它们时,输入/输出错误的原因是什么。任何帮助表示赞赏。linux c socket error:输入/输出错误
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()
通话发生。
请添加一些代码,这是查看问题出在哪里的最好方法。 – Nobilis
如果(tv.tv_sec - sockArr [I] .heartBeatSendTime> = BEATTIM){ \t如果(!发送(sockArr [I] .sendSockFd,szBuffer,PACKETSIZE,0)= PACKETSIZE){ \t \t fprintf中(错误,“心跳包发送失败:[%d] [%s] \ n“,errno,strerror(errno)); \t \t如果(错误== EBADF ||错误号== ECONNRESET ||错误号== ENOTCONN ||错误号== EPIPE){ \t \t \t调试( “链路失去连接\ n”); \t \t \t Reconn(i); \t \t \t继续; \t \t} \t} \t否则{ \t \t sockArr [I] .heartBeatSendTime = tv.tv_sec; \t \t如果(sockArr [I] .STATUS == SOCK_IN_FLY) \t \t \t sockArr [I] .heartBeatRecTime = tv.tv_sec;在发送发生 \t}} 的 –
误差()调用 –