看板 PangSir 關於我們 聯絡資訊
請問助教, socket在傳資料的時候, 是不是一個read對應到一個write? 有沒有可能一次write的資料分兩次來read? 或一次read到兩次write的資料? 例如: 1.clientA一次在sock中寫入128Byte的資料: write(sockfd, bufA, 128); clientB讀取socket用的buffer只有64Byte bufB[64]; read(sockfd, bufB, 64); --取出bufB的東西-- read(sockfd, bufB, 64); 這樣能完整讀到clientA傳的資料嗎? 或是第二次read讀不到東西? 2.clientA將128Byte的資料分兩次傳出: write(sockfd, bufA, 64); --更新bufA-- write(sockfd, bufA, 64); clientB用128Byte的buffer去讀(假設此時資料已全部傳到B處): read(sockfd, bufB, 128); 這樣能讀到完整的資料嗎? 還是一定只能讀到第一次write的東西? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.217.36
a13032002:read應該是一有東西不管長度有沒有到就return了? 10/27 22:10
a13032002:要確保讀到一定的長度似乎要用recv加上MSG_WAITALL(?) 10/27 22:12
simonxander:你所舉的例子都是可以收到資料的 10/27 22:24
simonxander:不過 read 的第3個參數是指"最多"讀幾個byte 10/27 22:25
simonxander:並不是讀到幾個byte後停止 10/27 22:25
penknife211:助教謝謝! 10/28 18:01