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]='