【发布时间】:2015-01-26 03:48:08
【问题描述】:
服务器端子函数:接收客户端数据,然后关闭套接字
server side child func:
char line[1024];
bzero(line,sizeof(line));
int ret = recv(fd,line,sizeof(line),0);
if(ret > 0){
cout << line << endl;
}else if(ret < 0){
cout << "recv error" << endl;
}else if(ret == 0){
cout << "client close" << endl;
break;
}
shutdown(fd,SHUT_WR);
客户端主函数
char line[] = "ds2d2d2d2d21dwq";
send(sockfd,line,sizeof(line),0); //send to server
//server side the child func has exit
sleep(20);
cout << "write to server" << endl;
//write to server again
ret = send(sockfd,line,sizeof(line),0);
perror("write...."); //write success
//according to unp book ,the server has send the RST msg to client
bzero(line,sizeof(line));
sleep(5);
//recv should return error and the error code should ECONNRESET
//but not appear , the recv success return 0(EOF)
//then execute recv success return 0(EOF)
ret = recv(sockfd,line,sizeof(line),0);
cout << ret <<line << endl;
perror("recv....");
ret = recv(sockfd,line,sizeof(line),0);
perror("recv....");
不知道对不对?内核改进。我发现recv系统没有ECONNRESET错误代码
【问题讨论】:
-
对错误使用
perror或strerror