为什么在fork中要close一下listen返回的值
qjzrd 2010-04-15 04:11:42 最近在网上看别人写的sock + fork 中有close一下listen的返回值,不知道为什么要这么做
代码如下:
int main(int argc, char **argv)
{
int fd;
int address_len;
struct sockaddr_in address;
int listenfd;
if(readFile()==0)
{
printf("read record failed!\n");
}
fd = socket(AF_INET, SOCK_STREAM, 0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(INADDR_ANY);
address.sin_port = htons(1234);
address_len = sizeof(address);
bind(fd, (struct sockaddr *)&address, address_len);
listenfd = listen(fd, 64);
while(1) {
struct sockaddr_in client_address;
int len;
int client_sockfd;
char *data = "client end!\n";
char data2[datasize];
pid_t pid;
printf("waiting...\n");
fflush(stdout);
len = sizeof(client_address);
client_sockfd = accept(fd,
(struct sockaddr *)&client_address, &len);
if( (pid = fork()) == 0){
printf("%d\n",client_sockfd);
close(listenfd);
int i;
struct logininfo login;
intimebind(&login);
bzero((void *)data2, datasize);
read(client_sockfd,login.name,20);
for(i=0;i<3;i++)
{
read(client_sockfd,data2,datasize);
printf("server read line:%s\n", data2);
}
send(client_sockfd,data,strlen(data),0);
printf("server send line:%s\n", data);
close(client_sockfd);
outtimebind(&login);
printf("%s\t %d\t %d\t %d\t %d\t %d\t %d\t %d \t%d \t%d\t %d\n",login.name,login.inyear,login.inmonth,login.inday,login.inhour,login.inmin,login.outyear,login.outmonth,login.outday,login.outhour,login.outmin);
newrecord(&login);
exit(0);
}
close(client_sockfd);
}
}