2016-12-25 34 views
-1

バッファを指定せずにソケットからデータを受信したい。だから私は、着信データバッファからxバイトを削除したいだけです。WinSock:ソケットからデータを削除する

Iは、次のコード(切り捨て)を有する:

recv(gSocket, NULL, userDataLength, 0); 

をしかし、私はrecv()の戻り値は上記のコードを実行するときSOCKET_ERRORWSAGetLastError()戻るWSAECONNABORTEDあります。さらに、私の接続は閉じます。

質問:受信機能を使用してソケットのRXバッファからデータを削除することはできませんか?

+0

それはバッファポインタがNULLとなる可能性があると言うのでしょうか? – EJP

+0

どこにもありません。しかし、他のソケットライブラリーでは可能なので可能だと思いました。 –

+1

私はそのようなライブラリを認識していませんが、いずれにせよ*非連続的です。* – EJP

答えて

2

バッファを指定せずにソケットからデータを受信したいとします。

申し訳ありませんが、それは単にできません。バイトを受信するバッファを用意する必要があります。バイトを使用したくない場合は、読み込んだ後にバッファを破棄してください。

受信データバッファからxバイトを削除したいだけです。

APIはありません。バイトを有効なバッファに読み込む必要があります。後でそのバッファで行うことは、あなた次第です。

Iはrecv()の戻り値以上のコードを実行SOCKET_ERRORWSAGetLastError()戻るWSAECONNABORTEDあります。

代わりにWSAEFAULTが必要です。

ソケットのRXバッファからデータを削除する受信機能を使用することはできませんか?

もちろん、可能です。あなたは、単に例えば、それだけで一時的なバッファであっても、バッファにバイトを読み取ることがあります。

int ignoreBytes(SOCKET sock, int numBytes) 
{ 
    u_char buf[256]; 
    while (numBytes > 0) 
    { 
     int numRead = recv(sock, (char*)buf, min(sizeof(buf), numBytes), 0); 
     if (numRead <= 0) 
      return numRead; 
     numBytes -= numRead; 
    } 
    return 1; 
} 

ignoreBytes(gSocket, userDataLength); 
+0

答えをありがとう。私はあなたのコードに似たバイトを削除/無視する独自の関数を書いています。 –

関連する問題