[問題] WINSOCK send 和 recv

看板C_and_CPP (C/C++)作者 (沒有暱稱)時間16年前 (2009/05/19 01:14), 編輯推噓1(107)
留言8則, 2人參與, 最新討論串1/2 (看更多)
若 client 欲 recv() server 的 send() 可是並不清楚 send 會回傳的資料量 如果沒有接收完 send data 那 server 會 bound 住直到recv 完 data 嗎? (假定 server 為 single thread) 又我要如何判斷是否接收資料完畢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.170.171

05/19 01:52, , 1F
看封包最快最清楚
05/19 01:52, 1F

05/19 09:34, , 2F
你可以用 MSG_WAITALL 來保證收取的長度
05/19 09:34, 2F

05/19 09:35, , 3F
recv(sock, buf, len, MSG_WAITALL);
05/19 09:35, 3F

05/19 09:36, , 4F
如果要看有多少 byte 可以收 可以用 ioctlsocket
05/19 09:36, 4F

05/19 09:37, , 5F
u_long iMode = 1;ioctlsocket(sock, FIONBIO, &iMode);
05/19 09:37, 5F

05/19 09:38, , 6F
如果沒有使用MSG_WAITALL, 回傳的長度會小於等於你要的
05/19 09:38, 6F

05/19 09:39, , 7F
上面貼錯 那是設定non-blocking 這個才是觀看收的長度
05/19 09:39, 7F

05/19 09:40, , 8F
unsigned long has;ioctlsocket(sock, FIONREAD, &has);
05/19 09:40, 8F
文章代碼(AID): #1A4PTXGX (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1A4PTXGX (C_and_CPP)