1.当客户端阻塞于某个输入操作时,服务器发送过来的终止连接的消息或者服务器崩溃的FIN,客户端将接受不到,而客户端以为服务器还在正常运行,一味的给服务器发消息。那么客户端将收到一个RST,但是客户端正忙于其他操作,忽略了这个RST,客户端继续调用read方法,如果read方法调用发生在RST到来之前,将返回一个0(EOF),否则返回一个ECONNRESET(对方复位连接错误),最终退出程序。
2.因此,我们可以用select 的i/o复用的方式重新编写我们的代码:
客户端改编之后的代码:
#include "unp.h"
int
main(int argc, char **argv){
int sockfd;
struct sockaddr_in servaddr;
if(argc != 2)
err_quit("usage : tcpcli <IPaddress>");
sockfd = Socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
Inet_pton(AF_INET,argv[i],&servaddr.sin_addr);
Connect(sockfd,(struct sockaddr*)&servaddr,siz