winsock でノンブロッキング ソケットを使用していますが、部分的にデータを受信できるのでしょうか?
私のパケットには「長さ」のワードが含まれており、最初にそれを読み取ってから、「長さ」に従ってパケット全体を読み取る必要があります。
実際、この質問は「recv() はどのように機能して終了するのですか?」のようなものですが、すべてのデータを取得するまで recv() を使用できますか?
ソケットの種類によって異なります。データグラム ソケットの場合は、データグラムrecv
全体を 1 つだけ読み取ります。TCP ソケットの場合:
recv
返す前に少なくとも 1 バイトを読み取りますrecv
複数の完全な情報を読み取ることができますmessage
TCP を使用している場合は、おそらく次のようにします。
length
バイトreadn
関数から始めることができます。
TCP ソケットの場合: 十分なバイト数が得られるまで、recv をループで使用できます。recv は、要求したよりも少ないバイト数を返す場合があることに注意してください。その場合は、メッセージ全体がわかるまで電話をかけ続けてください。