こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

WinSock32のTCP通信において、recvする前にどれだけの量がソケットにたまっているか調べる方法ってありますか?

タイトルのとおりなのですが、
WinSock32のTCP通信において、recvする前にどれだけの量がソケットにたまっているかを調べたいのですが、方法が見つかりません。
WinSock32の関数に用意されているのでしょうか?

関数名だけでもいいので教えていただけると助かります。
よろしくお願いいたします

投稿日時 - 2005-10-24 22:59:19

QNo.1733861

すぐに回答ほしいです

質問者が選んだベストアンサー

#1&2です

ん?
最初バッファに
"ABCDE"
があったとします。
ここで、
char buf[4096];
rb=recv(s,buf,sizeof(buf),MSG_PEEK);
とやると
rb=5
buf="ABCDE"
バッファ="ABCDE"
となります。

その後,"FGH"をsendしたとします。
(ここで、「相手は受信したデータをそのまま返す」とします)

次にrecvやるときには
バッファには、"ABCDEFGH"があるはずです。

普通は、recv(s,buf,sizeof(buf),MSG_PEEK)の後に
recv(s,buf,5,0)をやって"ABCDE"の読み込み&削除します

こーいう意味じゃなくて??

投稿日時 - 2005-10-29 01:05:37

お礼

そういうことですか。ちょっと勘違いしていたようです。
分かりました、どうもありがとうございましたm(_ _)m

投稿日時 - 2005-10-29 16:12:54

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

#1です。
絶対に誤解を生む回答でしたので、再度回答します。

recvの第4引数にMSG_PEEKを指定すると、第3引数で示されたバイト数までのデータを受信し、且つ受信したデータをバッファから削除しません。
よって、バッファに何バイトたまっているかを正確に知るには、とっても大きなバッファを用意する必要あります。

投稿日時 - 2005-10-26 00:24:00

補足

第4引数にMSG_PEEKを指定し受信したところ、確かにデータは残っていました。
ですが、その後にデータを送信しrecvしても、最初のデータだけしか読み取ることができませんでした。これはどういうことなのでしょうか?
一度お礼を申し上げたのに再び質問してしまいすみません。
よろしくお願いいたしますm(_ _)m

投稿日時 - 2005-10-27 22:36:46

お礼

ちょうどそのことについて質問しようと思っていました。
NULLじゃだめなんですね^^;
わかりました、とっても大きなバッファを用意することにします。
2度も回答をありがとうございました。

投稿日時 - 2005-10-26 18:05:22

ANo.1

recvの4番目の引数にMSG_PEEKを指定すると、何バイトたまっているかが返ってきます

投稿日時 - 2005-10-25 04:58:45

あなたにオススメの質問