我想确保我尝试在插座上使用accept()
的方式的正确性。用插座分叉
我知道在Linux下是安全的listen()
一个插座上,fork()
ñ孩子再recv()
在所有的人都没有从用户侧的任何同步数据包(数据包获得更多或更少的负载平衡的子女之间) 。但是这是UDP。
TCP和listen()
,fork()
,accept()
是否保留相同的属性?我可以假设在父母创建的共享套接字上接受是可以的,即使其他孩子也一样吗? POSIX,BSD套接字或任何其他标准在某处定义它?
我想确保我尝试在插座上使用accept()
的方式的正确性。用插座分叉
我知道在Linux下是安全的listen()
一个插座上,fork()
ñ孩子再recv()
在所有的人都没有从用户侧的任何同步数据包(数据包获得更多或更少的负载平衡的子女之间) 。但是这是UDP。
TCP和listen()
,fork()
,accept()
是否保留相同的属性?我可以假设在父母创建的共享套接字上接受是可以的,即使其他孩子也一样吗? POSIX,BSD套接字或任何其他标准在某处定义它?
如果您在子项中使用fork()然后接受(),则只有一个子进程将在连接上调用accept(),然后对其进行处理。这是预分配,连接不会在儿童之间共享。
您可以通过颠倒订单并接受和分叉来为每个连接方案执行标准的一个孩子。然而,这两种技术都是为了效率,平衡等,而不是为了共享特定的连接。
TCP与UDP不同。在TCP中这样做是不可取的,因为你几乎肯定会陷入混乱。给定的收到消息可以分散在一个或多个数据包上,对于多个进程进行协调比让一个孩子处理连接更麻烦。
看这里... http://www.linuxhowtos.org/C_C++/socket.htm – 2010-05-03 00:53:26