當我嘗試向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}} 的 –
誤差()調用 –