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

Wan*_*Wei 4 sockets linux webserver

我正在阅读套接字编程。似乎实现多进程 Web 服务器的建议方法是:父进程创建一个侦听套接字,每当它接受新连接时,它就会分叉一个子进程。由于 fork() 进程继承了所有打开的文件描述符,因此“正常”方式似乎让子进程 close() 从父进程继承的侦听套接字,并让父进程 close() 新接受的套接字。

我想知道,如果父级或子级不 close() 任何东西并继续使用套接字怎么办?共享同一个套接字的两个进程可以同时在同一个共享套接字上执行发送/接收操作吗?有什么影响?

use*_*421 5

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

是的。

有什么影响?

可能存在交错的消息,并且几乎可以肯定接收器处完全混乱。


Ser*_*eyA 5

从技术上讲你可以。在实践中,编写任何理智的代码是不可能的。如果您尝试在两个单独的应用程序中从同一套接字读取数据,则两个(或更多)进程之间将出现随机读取分布。在处理 UDP 套接字时有时会采用这种设计,以并行化消息处理。但不可能以这种方式对 TCP 套接字执行任何操作。