-1

Select() を使用して、ソケットで読み取り可能なデータがあるかどうかを判断する際に問題が発生しています。接続しているソケットにはデータがないため、select がタイムアウトまたは 0 の値を返すことを期待しています。代わりに、-1 の値を取得し、メッセージは「エラー: エラーなし」です。

この例に非常によく似たコードがあります: https://beej.us/guide/bgnet/html/multi/selectman.html

ここで select() ドキュメントを数回読みました: msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspx

どんなアイデアでも大歓迎です。ありがとう!

仕様: C++、Win-XP、Microsoft Visual C++ 2010

4

1 に答える 1

3

実際にソケットを作成するに、ソケットを fd_set 構造に追加しています。

FD_SET(s, &readfds);
// (...)
int iConnected = ConnectToHost(PortNum, IpAddy);
//^ This actually calls: s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);

したがって、無効なソケットを fd_set に追加しています。これを行う前にソケットを作成します。

int iConnected = ConnectToHost(PortNum, IpAddy);
//(...)
FD_SET(s, &readfds);
于 2012-02-27T20:06:23.443 に答える