对connect失败后套接字是否依然有效的疑问?

unix网络编程书上说:当函数connect失败后,套接字不可再用,必须关闭,不能对该套接字调用connect...

而我在windows和linux下测试, 不新建套接字,循环connect直到连接(启动服务后)可以成功???不解啊....

 

 

/******* 客户端程序 client.c ************/  
#include 
< stdlib.h >  
#include 
< stdio.h >  
#include 
< errno.h >  
#include 
< string .h >  
#include 
< netdb.h >  
#include 
< sys / types.h >  
#include 
< netinet / in .h >  
#include 
< sys / time.h >
#include 
< sys / socket.h >  
int  main( int  argc,  char   * argv[]) 

int sockfd; 
//char buffer[1024]; 
char hello[]="Hello!!!! Are You Fine? "

struct sockaddr_in server_addr; 
struct hostent *host; 
int portnumber,nbytes; 
if(argc!=3

fprintf(stderr,
"Usage:%s hostname portnumbera ",argv[0]); 
exit(
1); 
}
 
if((host=gethostbyname(argv[1]))==NULL) 

fprintf(stderr,
"Gethostname error "); 
exit(
1); 
}
 
if((portnumber=atoi(argv[2]))<0

fprintf(stderr,
"Usage:%s hostname portnumbera ",argv[0]); 
exit(
1); 
}
 
/* 客户程序开始建立 sockfd描述符 */ 
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1

fprintf(stderr,
"Socket Error:%sa ",strerror(errno)); 
exit(
1); 
}
 
/* 客户程序填充服务端的资料 */ 
bzero(
&server_addr,sizeof(server_addr)); 
server_addr.sin_family
=AF_INET; 
server_addr.sin_port
=htons(portnumber); 
server_addr.sin_addr
=*((struct in_addr *)host->h_addr); 
/* 客户程序发起连接请求 */ 
while(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr) 
)
==-1

fprintf(stderr,
"Connect Error:%sa ",strerror(errno)); 
usleep(
1000*1000);
//exit(1); 
}
 

fprintf(stdout,
"Connect ...a "); 
/* 连接成功了 */ 
/*if(write(sockfd,hello,strlen(hello))==-1) 

fprintf(stderr,"Write Error:%s ",strerror(errno)); 
exit(1); 
*/

/*if((nbytes=read(sockfd,buffer,1024))==-1) 

fprintf(stderr,"Read Error:%s ",strerror(errno)); 
exit(1); 

buffer[nbytes]='
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值