fad*_*bee 9 c unix linux networking
以下代码片段创建了4个进程,所有进程共享相同的侦听套接字.
这样做有危险吗?在以传统方式接受连接后,我是否应始终拥有一个监听过程和分支?
for (p = 0; p < 3; p++) {
pid = fork();
if (pid == 0) break;
}
while (1) {
unsigned int clientlen = sizeof(echoclient);
/* Wait for client connection */
if ((clientsock =
accept(serversock, (struct sockaddr *) &echoclient,
&clientlen)) < 0) {
die("Failed to accept client connection");
}
fprintf(stdout, "Process No. %d - Client connected: %s\n",
p,
inet_ntoa(echoclient.sin_addr));
handle_client(clientsock);
}
Run Code Online (Sandbox Code Playgroud)
(我知道接受后分叉允许一个程序为每个连接创建一个进程.我正在玩原型线程和各种异步的东西,所以我只想看每个核心有一个进程.)
Duc*_*uck 11
你可以这样做.
如您所知,在接受后分叉是每个客户端/连接一个孩子.在接受之前分叉(但是在听之后)通常被称为预分叉.每个孩子都在等待接受,并且任何孩子获得传入连接都会处理它.这是安全的,只要接受是由内核完成的(我认为)任何现代的unix都可以.如果没有,你必须在接受周围放置某种IPC(互斥等).预分叉的优点是您不需要为每个连接花费一个分支,您已经有一个现有的池.
| 归档时间: |
|
| 查看次数: |
2852 次 |
| 最近记录: |