【发布时间】:2011-01-12 14:10:49
【问题描述】:
我正在尝试在 管道 和 unix 套接字 之间进行选择以实现 IPC 机制。
两者都支持select() 和epoll() 功能,非常棒。
现在,管道有 4kB(截至今天)“原子”写入,这是由 Linux 内核保证的。
在 unix 套接字的情况下是否存在这样的功能?我找不到任何明确说明这一点的文件。
假设我使用 UNIX 套接字并从客户端写入 x 字节的数据。当我的服务器的select() 破解时,我确定这些 x 字节将写入套接字的服务器端吗?
在同一主题上,使用 SOCK_DGRAM 是否会确保写入是原子的(如果这样的保证是可能的),因为数据报应该是单个明确定义的消息?
那么使用 SOCK_STREAM 作为传输模式会有什么不同呢?
提前致谢。
【问题讨论】:
-
我删除了我的答案,因为我对 AF_UNIX 套接字系列不太熟悉。当我回答时,我不认为您的意思是“Unix Socket == AF_UNIX”。 man page 确实说带有 Unix 套接字的数据报是完全可靠的。所以这可能是你的一个选择。但由于我没有使用它们,我将它留给更有知识的人来回答。