我正在阅读有关套接字编程的内容。似乎实现多进程Web服务器的建议方法是:父进程创建一个监听套接字,每当它接受新连接时,就会fork出一个子进程。由于fork()进程继承所有打开的文件描述符,所以“正常”的做法似乎是让子进程关闭从父进程继承而来的监听套接字,然后让父进程关闭新接受的套接字。
我想知道,如果父进程或子进程只是不关闭任何东西并继续使用套接字,两个进程可以同时在同一个共享套接字上执行发送/接收操作吗?这会有什么影响吗?
两个进程可以同时在同一个共享套接字上执行发送/接收操作吗?
可以。
这会有什么影响吗?
可能会产生交错的消息,并且接收者几乎肯定会出现混乱。
从技术上讲,你是可以这样做的。但实际上编写任何合理的代码都是不可能的。如果你尝试在两个独立的应用程序中从同一个套接字读取数据,将会导致随机读分布在两个或多个进程之间。这种设计有时在处理UDP套接字时使用,以并行处理消息。但使用TCP套接字无法以此方式执行任何操作。