none
System::Net::Sockets::Select()で、第4引数に"-1"をセットしても無限待ちにならない RRS feed

  • 質問

  • Visual Studio 2008で、VC++を用いて.NET Frameworkのプログラムを書いています。

    System::Net::Sockets::Select()を使用し、Selectで無限待ちさせることを意図して、以下のようにコードを書きました。

    ----

    Socket^ sock;  (実体は設定済)

    System::Collections::ArrayList^ listenList;

    listenList = gcnew System::Collections::ArrayList();

    Socket^ tmpSock = nullptr;

    listenList->Add(tmpSock);

    listenList[0] = sock;

    sock->Select(listenList, nullptr, nullptr, -1);

    ----

    MSDNのSocket.Selectメソッドの説明を見ると、第4引数の説明として、「タイムアウト値(マイクロ秒単位)。-1の値はタイムアウトが無期限であることを示します。」との記述があります。 ところが、これを信じて上記のコードを動かすと、Selectがなぜか待ち時間0秒で抜けてしまいます。

    なお、第4引数に正の値をセットすると期待通りにマイクロ秒単位の指定時間待ってからSelectを抜けますし、-2以下の負の値をセットするとSelectで無限待ちをするようです。

    第4引数に-1をセットしたとき待ち時間0秒で抜けてしまうのは、上記の箇所以外のところなどで何か使い方に誤りがある、ということなのでしょうか。 もしくは、単純にMSDNの説明が違っている、としてよいのでしょうか。

    とりあえず、期待したSelectでの無限待ちは実現できたのですが、説明と挙動が違っているので非常に心配です。

    以上、よろしくお願いいたします。

    2013年9月4日 6:24

回答

すべての返信