[英]Is write to SOCK_SEQPACKET atomic?
我的意思是原子是成功或失敗,什么都不做。
我知道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
或len
。
是。
任何基於數據報的接口(即 - 您傳遞給write
的大小對於執行read
的人員是可見的)必須是原子的。 沒有其他方法可以保證財產。
所以SOCK_SEQPACKET
以及SOCK_DGRAM
必須是原子才能運行。
出於同樣的原因, SOCK_STREAM
沒有這樣的原子保證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.