簡體   English   中英

寫入SOCK_SEQPACKET原子?

[英]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 ,返回值總是-1len

是。

任何基於數據報的接口(即 - 您傳遞給write的大小對於執行read的人員是可見的)必須是原子的。 沒有其他方法可以保證財產。

所以SOCK_SEQPACKET以及SOCK_DGRAM必須是原子才能運行。

出於同樣的原因, SOCK_STREAM沒有這樣的原子保證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM