Eng*_*uad 2 c sockets linux process
我正在尝试在Linux上实现一个连接到客户端(浏览器)的简单Web服务器,从客户端接收一些请求(例如GET),然后用所需文件发回响应.我正在使用套接字通信.我想在服务器启动时创建一个工作进程池(子进程),其工作是处理传入的请求.父进程必须处理accept()传入请求,并将其文件解析器发送到其中一个工作进程以处理它,并将响应发送到具有所请求文件的客户端.
我遇到的问题是,当我accept()发出请求并将其发送到工作进程时,recv()或者read()函数返回-1意味着发生错误:
非套接字上的套接字操作
但是当我尝试在父进程中使用recv()或read()运行时,它们工作得非常好并返回接收的字节数.
我该如何解决这个问题?
PS:我正在使用共享内存将文件解析器从父进程传递到工作进程(子进程),我使用信号量来管理哪个工作进程将处理请求
编辑:
实际上,它是一个项目赋值,其中一个规范是通过共享内存发送文件描述符.但是,我可以发送文件描述符的指针吗?
您无法通过共享内存AFAIK发送文件描述符.所以你所做的实际上是向工作进程发送一个小整数.
你可以做的是,使用sendmsg和辅助数据通过Unix域套接字发送文件描述符.这听起来有点像魔术(哎呀,这是一个有点像魔术),但它的Unix之间的非常标准,所以应该工作.
| 归档时间: |
|
| 查看次数: |
603 次 |
| 最近记录: |