分叉进程(子进程)和父进程共享套接字的影响

4

我正在阅读有关套接字编程的内容。似乎实现多进程Web服务器的建议方法是:父进程创建一个监听套接字,每当它接受新连接时,就会fork出一个子进程。由于fork()进程继承所有打开的文件描述符,所以“正常”的做法似乎是让子进程关闭从父进程继承而来的监听套接字,然后让父进程关闭新接受的套接字。

我想知道,如果父进程或子进程只是不关闭任何东西并继续使用套接字,两个进程可以同时在同一个共享套接字上执行发送/接收操作吗?这会有什么影响吗?

2个回答

5

两个进程可以同时在同一个共享套接字上执行发送/接收操作吗?

可以。

这会有什么影响吗?

可能会产生交错的消息,并且接收者几乎肯定会出现混乱。


5

从技术上讲,你是可以这样做的。但实际上编写任何合理的代码都是不可能的。如果你尝试在两个独立的应用程序中从同一个套接字读取数据,将会导致随机读分布在两个或多个进程之间。这种设计有时在处理UDP套接字时使用,以并行处理消息。但使用TCP套接字无法以此方式执行任何操作。


谢谢您的回答。但是这似乎意味着已建立的TCP连接在一端有一个参与方,而在另一端有两个参与方。这是否以任何方式违反了TCP协议? - Wang Wei
不,它并没有违反TCP协议,在这种情况下它并没有提到接收端会发生什么。但是它使其无法使用。 - SergeyA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接