69,369
社区成员
发帖
与我相关
我的任务
分享
socket(…);
bind(…);
listen(…);
while(1)
{
accept(…);
if(fork(..)==0)
{
while(1)//????
{
read(…);
process(…);
write(…);
}
close(…);
exit(…);
}
close(…);
}
if(fork(..)==0)
{
while(1)//????
{
read(…);
process(…);
write(…);
}
close(…);
exit(…);
}
int main()
{
int listenfd,connfd;
pid_t pid;
struct sockaddr_in server;
struct sockaddr_in client;
int len;
if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("Creating socket failed");
exit(1);
}
int opt=SO_REUSEADDR;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(listenfd,(struct sockaddr *)&server,sizeof(server))==-1)
{
perror("Bind() failed");
exit(1);
}
if(listen(listenfd,BACKLOG)==-1)
{
perror("listen failed");
exit(1);
}
len=sizeof(client);
while(1)
{
if((connfd=accept(listenfd,(struct sockaddr *)&client,(socklen_t *)&len))==-1)
{
perror("accept() failed");
exit(1);
}
if((pid=fork())>0)
{
close(connfd);
continue;
}
else if(pid==0)
{
close(listenfd);
process_cli(connfd,client);
exit(0);
}
else
{
printf("fork() failed");
exit(0);
}
}
close(listenfd);
return 0;
}