- 论坛徽章:
- 0
|
socket绑定问题
不好意思,见笑了。
以前对socket建立的过程理解有误。查了一下,用fork和select都可以实现一个server接受多个client的连接。就如同surfzsl写的函数了。
偶这个比较简单,增加fork之后就可以实现了。
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{ perror(NULL); exit(2); }
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(TIME_PORT);
bzero(&(serv_addr.sin_zero), ;
t=bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr_in));
if (t == -1) { printf("Bind not successful\n" ; exit(0); }
printf("bind was successful\n" ;
listen(sockfd, 5);
printf("listen was successful\n" ;
for(; {
len = sizeof(struct sockaddr_in);
client_sockfd = accept(sockfd, (void *)&client_addr, &len);
printf("connection made - client sockfd is %d\n",client_sockfd);
printf("Request from %s port %d\n",inet_ntoa(client_addr.sin_addr),
ntohs(client_addr.sin_port));
if((PID=fork())==-1){
close(client_sockfd);
continue;
}else if(PID>;0){
close(client_sockfd);
continue;
} buflen = read(client_sockfd,&buf,SIZE);
write(1,buf, buflen);
printf("\n" ;
........................
close(client_sockfd);
exit(0);
}
}
另外,关于Time_Wait,有个网页说的挺清楚的,可以去看一下
http://www.phpx.com/cma2029.html |
|