作者penknife211 (老闕的學生)
看板PangSir
標題[ CN ] socket的read&write
時間Sat Oct 27 17:12:32 2012
請問助教,
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