给出有问题代码!请大虾帮看看!Linux下使用socket传输文件(为客户端),在将服务端网络断开后为什么客户端还在Recv,程序不结束!
下面是写文件的部分代码,将传输文件时我将服务端网络断开后(拔掉网线),程序执行到 write_normal_msg(" TCP/IP FullReceiveFile: begin recv file");写完日志后就不往下走啦,还在Recv,这时网络已经断开啦。应该要退出的,服务端时使用VC6.0。调试环境为公司局域网。
while (fileloop == 0)
{
write_normal_msg(" TCP/IP FullReceiveFile: begin recv file");
memset(rcvbuf,0x00,sizeof(rcvbuf));
iBytesRead=recv(sockfd, rcvbuf, FILEPACKAGE, 0); //接收
write_normal_msg(" TCP/IP FullReceiveFile: after recv file");
if (iBytesRead<=0){
return -1;
}
write_normal_msg(" TCP/IP FullReceiveFile: after check recv file");
memset(msgstr,0x00,sizeof(msgstr));
sprintf(msgstr," TCP/IP FullReceiveFile: iBytesRead %d ",iBytesRead);
write_normal_msg(msgstr);
if ((rcvbuf[iBytesRead-6]==0x19) && (rcvbuf[iBytesRead-5]==0x19) && (rcvbuf[iBytesRead-4]==0x20) &&(rcvbuf[iBytesRead-3]==0x20) &&(rcvbuf[iBytesRead-2]==0x20) && rcvbuf[iBytesRead-1]==0x19){
data = (char *)malloc(iBytesRead-4);
memset(data,0x00,iBytesRead-4);
for (i = 0 ;i < iBytesRead-4 ;i++){
data[i] = rcvbuf[i];
}
fwrite(data,iBytesRead-6,1,fp);
//write_normal_msg(" FullReceiveFile : Write File End");
free(data);
break;
}
else
{
fwrite(rcvbuf,iBytesRead,1,fp);
//write_normal_msg(" FullReceiveFile : Write File Data");
}
}