我的意思是原子是成功或失败,什么都不做。
我知道socketpair(AF_LOCAL, SOCK_STREAM)
不是原子的,如果多个进程/线程调用write(fd, buf, len)
,返回值write()
可能> 0 && < len
会导致数据乱序。
如果多个进程/线程write(buf, len)
到sock_fd
由创建的一个socketpair(AF_LOCAL, SOCK_SEQPACKET)
,它是原子的吗?
我检查了 Linux 手册,发现pipe()
如果len
小于PIPE_BUF
,则write/writev
是原子的。
我什么也没找到socketpair
。我写了一个测试代码,发现它似乎SOCK_SEQPACKET
是原子的,我将随机长度的缓冲区写入fd
并且返回值始终是-1
or len
。