1

Vista での winsock の send() 関数の呼び出しをブロックしてすぐに返す理由はありますか? XP以下では予想される遅延で動作します。これは、Vista の自動調整機能と関係があるのでしょうか。コード:

   char *pBuffer; // pointer to data
   int bytes;  // total size
   int i = 0, j=0;
   while (i < bytes)
   {
    j = send(m_sock, pBuffer+i, bytes-i, 0);
        i+=j;
   }

ありがとう、
パヴァン

4

2 に答える 2

3

最初の可能性は、send() が失敗して SOCKET_ERROR を返したことです。あなたのコードはこれを検出できません。本当に修正する必要があります。

次の可能性は、send() が単にブロックしないということです。これはごく普通のことですが、トランスポート サブシステムにバッファ スペースが残っていない場合にのみブロックされます。それが起こる前に、数メガバイトをポンピングする必要があります。

于 2010-03-25T13:21:11.963 に答える
1

おそらく送信バッファがいっぱいです。send() からの戻りコードを確認してください

于 2010-03-25T12:27:56.373 に答える