[ CN ] socket的read&write

看板PangSir作者 (老闕的學生)時間11年前 (2012/10/27 17:12), 編輯推噓3(303)
留言6則, 3人參與, 最新討論串1/1
請問助教, 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

10/27 22:10, , 1F
read應該是一有東西不管長度有沒有到就return了?
10/27 22:10, 1F

10/27 22:12, , 2F
要確保讀到一定的長度似乎要用recv加上MSG_WAITALL(?)
10/27 22:12, 2F

10/27 22:24, , 3F
你所舉的例子都是可以收到資料的
10/27 22:24, 3F

10/27 22:25, , 4F
不過 read 的第3個參數是指"最多"讀幾個byte
10/27 22:25, 4F

10/27 22:25, , 5F
並不是讀到幾個byte後停止
10/27 22:25, 5F

10/28 18:01, , 6F
助教謝謝!
10/28 18:01, 6F
文章代碼(AID): #1GYwM2mj (PangSir)