我有两个进程 - 父母和孩子。父级建立套接字对,并将其作为 fork 的一部分传递给子级。然后父级接受连接并传递每个新的套接字 fd 以供子级处理。这是通过 sendmsg 完成的。当传入连接的速率约为每秒 10 个时,这可以正常工作。但是,在增加到每秒 200 次后,我继续收到消息 sendmsg:没有可用的缓冲区空间。这可能是什么原因?我应该检查什么?
到目前为止,这是我的想法:我想知道是否像其他套接字调用一样,当孩子执行 recvmsg 时,应该将其从套接字对缓冲区中删除
我有两个进程 - 父母和孩子。父级建立套接字对,并将其作为 fork 的一部分传递给子级。然后父级接受连接并传递每个新的套接字 fd 以供子级处理。这是通过 sendmsg 完成的。当传入连接的速率约为每秒 10 个时,这可以正常工作。但是,在增加到每秒 200 次后,我继续收到消息 sendmsg:没有可用的缓冲区空间。这可能是什么原因?我应该检查什么?
到目前为止,这是我的想法:我想知道是否像其他套接字调用一样,当孩子执行 recvmsg 时,应该将其从套接字对缓冲区中删除
最可能的原因是您的子进程从套接字读取的速度不够快,因此父进程会溢出内核缓冲区,但如果不看代码就很难说。
您是否考虑过一次发送多个文件描述符cmsg(3)
?