使用pselect捕获套接字和信号事件

JSO*_*SON 0 c c++ sockets linux

我正在制作一个需要同时使用socket io和共享内存的消息服务.无论输入来自何处,例程都是相同的,唯一的区别是本地消息将通过套接字通过共享内存和非本地消息传递.这两个事件都必须取消阻止相同的pselect调用.在这一点上,我认为最好的选择可能是在将消息写入共享内存时发送信号并使用它来中断pselect调用,但我不确定如何做到这一点,或者即使它是最佳路由.

我不习惯使用信号.什么是实现这一目标的最佳方法?

Bas*_*tch 5

我会考虑使用管道(参见pipe(2))或AF_UNIX本地unix(7) 套接字(2)(如caf评论)至少传输控制信息 - 用于同步 - 关于共享内存(即告诉它何时有)改变了,即通过共享内存发送消息等等).然后你仍然可以复用例如poll(2)(ppoll(2)或者pselect(2)等等......)

我不认为使用信号的同步是正确的方法:信号很难正确(因此编码很棘手)并且它们不比在某些管道上交换几个字节更有效.

你考虑过使用MPI吗?