【发布时间】:2013-12-06 10:56:11
【问题描述】:
作为accept() 新客户端套接字的参数,
侦听器套接字位于共享内存区域中,并由所有分叉的服务器进程共享。
但是每个服务器 processesaccept()returns the same socket descriptor afteraccept()` 被所有不同的分叉进程调用。
fork() 是否也为套接字描述符和每个分叉进程创建单独的区域
单独管理区域?
这就是他们产生重复套接字描述符的原因吗?
我打算使用select() 来检测所有套接字描述符的变化,
但是因为它们产生所有相同的描述符,所以我无法理解..
【问题讨论】:
-
这个设置听起来很奇怪,你是从多个服务器上调用
accept()fork()ed?诶?通常,您有一个服务器在套接字上调用accept(),而fork()有一个单独的进程来处理客户端套接字... -
@MeNa:链接的问题是指线程而不是进程。
-
@alk 你说得对...这是关于进程的:stackoverflow.com/questions/5915144/…
-
监听套接字是共享的,因为它是您分叉时打开的文件描述符,而不是因为您正在使用共享内存(这不是必需的)。每个已建立的新连接仅存在于一个进程中,不能从其他进程访问(在
accept之前分叉)
标签: c linux sockets process fork