我正在阅读套接字编程。似乎实现多进程Web服务器的建议方法是:父进程创建一个侦听套接字,每当它接受一个新连接时,它就会分叉一个子进程。由于fork() - ed进程继承了所有打开的文件描述符,所以“正常”方式似乎让子进程close()从父进程继承的侦听套接字,并让父进程close()新接受的套接字。
我想知道,如果父母或孩子只是不关闭()任何事情并继续使用套接字,该怎么办?两个进程共享同一个套接字是否可以在同一个共享套接字上同时执行send / recv操作?有什么影响?
答案 0 :(得分:2)
两个进程共享同一个套接字是否可以在同一个共享套接字上同时执行send / recv操作?
是
有什么影响?
可能的交错消息,几乎可以肯定是接收器处的完全混乱。
答案 1 :(得分:2)
技术上你可以。在实践中,不可能编写任何合理的代码。如果您尝试在两个单独的应用程序中从同一个套接字读取,则会在两个(或更多)进程之间进行随机读取分配。在处理UDP套接字时,有时会出现这种设计,以便对消息处理进行并列化。但是用TCP套接字以这种方式做任何事都是不可能的。