【发布时间】:2018-03-03 22:09:23
【问题描述】:
我的意思是原子是成功或失败,什么都不做。
我知道socketpair(AF_LOCAL, SOCK_STREAM)不是原子的,如果多个进程/线程调用write(fd, buf, len),write()的返回值可能是> 0 && < len导致数据乱序。
如果多个进程/线程write(buf, len) 到由socketpair(AF_LOCAL, SOCK_SEQPACKET) 创建的sock_fd,它是原子的吗?
我查看了 Linux 手册,发现了一些关于 pipe() 的内容,其中说如果 len 小于 PIPE_BUF,则 write/writev 是原子的。
我没有发现任何关于 socketpair 的信息。我写了一个测试代码,发现SOCK_SEQPACKET似乎是原子的,我将随机长度缓冲区写入fd,返回值始终为-1或len。
【问题讨论】:
标签: linux ipc atomic socketpair