我正在尝试使用互联网域套接字为聊天应用程序创建一个小型服务器。服务器由调度程序和主服务器组成。
调度程序负责检测新的连接请求并在新线程中处理它们。该线程通过 FIFO 向主服务器发送信息。线程发送的包有一个它创建的管道 FD,以便主服务器可以与响应进行通信。调度程序由主服务器使用 fork 初始化,然后使用execve()。
问题是我无法从服务器将数据写入管道。我收到[EBADF 错误文件描述符]错误。
我知道我应该将管道 FD 从父进程传递给子进程,但是这个解决方案对我不起作用,因为我不知道我将同时需要多少个管道。此外,我不想为每个线程创建一个 FIFO,这意味着我需要为每个处于活动状态的线程创建一个新文件,我认为这不是一个非常优雅的解决方案。
所以总结一下:
- 是否可以以这种方式使用管道?
- 如果问题出在管道的使用上,为什么我不能将管道 FD 通过 FIFO 并在另一个进程中使用它?我读到,通过使用 UNIX 域套接字传递 FD,可以使用管道在不相关的进程之间进行通信。这些方法有什么区别?
- 你会推荐什么解决方案?