用听音插座分叉

时间:2010-05-02 23:24:35

标签: linux sockets tcp

我想确定我尝试在套接字上使用accept()的方式的正确性。

我知道在Linux中,套接字上listen()是安全的,fork() N个孩子,然后recv()所有数据包中的数据包都是安全的,没有来自用户端的任何同步(数据包)在孩子之间获得或多或少的负载平衡)。但那是UDP。

TCP和listen()fork()accept()的属性是否相同?我可以假设在父母创建的共享套接字上接受是可以的,即使其他孩子也这样做了吗?是POSIX,BSD套接字还是在某个地方定义它的任何其他标准?

1 个答案:

答案 0 :(得分:2)

如果你的孩子中有fork()然后是accept(),那么只有一个子进程会在连接上调用accept()然后处理它。这是预分叉,并且不会在孩子之间共享连接。

您可以通过撤消订单以及接受和分叉来为每个连接方案执行标准的一个孩子。然而,这两种技术都用于效率,平衡等,而不是用于共享特定连接。

TCP与UDP不同。在TCP中这样做是不明智的,因为你几乎肯定会弄得一团糟。给定的接收消息可以分布在一个或多个数据包上,对于多个进程进行协调比让一个子进程处理连接更麻烦。