我的意思是原子是成功或失敗,什麼都不做。是否寫入SOCK_SEQPACKET原子?
我知道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
。