- 论坛徽章:
- 0
|
我的程序框架如下:
int unicomServer::Run()
{
pid_t pid;
int iStatus;
socklen_t addr_size = (int)sizeof(remote_sin);
while (1)
{
conn_socket = accept(Mysocket, (struct sockaddr *)&remote_sin, &addr_size);
if (conn_socket < 0)
{
socket_error = MySOCKET_ACCEPT_ERROR;
return -1;
}
if ((pid = fork()) >; 0)
{
//while (wait(&iStatus) != pid); close(conn_socket);//父进程关闭连接描述符
continue;
}
else if (pid == 0)
{
close(Mysocket);//子进程关闭监听描述符
analyzePackage(conn_socket);
exit(0);
}
}
return 0;
}
现在的问题是:
1.如果有多个客户端来请求那么主进程应该分配多个socket,然后主进程fork多个进程处理多个socket的请求,然后再将结果通过不同的socket返回给不同的客户端,不过如果按我这么写,在fork之后的父进程里close(conn_socket)似乎将连接关闭之后,再来客户端还是分配原来的那个socket,如:客户端1的socket是4,客户端2的socket还是4,客户端3可能还是4,那么我再处理完成请求之后,如何区分将拿一个请求发给socket对应的客户端呢?如果选择在复进程中不关闭socket,倒是可以解决这个问题,不过如果不关闭socket那么客户端多了之后是不是因打开的socket描述符过多而报错呢?如果解决这一个问题呢?
2.在复进程中是否要加上while (wait(&iStatus) != pid); 这句呢,如果加上似乎要阻塞,直到处理完成当前请求之后才能分配下一个socket,也就是处理下一个请求,那么这样似乎是一个请求一个请求那么处理的,似乎没有起到并发服务器的作用,那么这里是否有必要加上wait呢? |
|