2012-02-27 14 views
0

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

私はこの例と非常によく似たコードがあります:私は数回、ここで選択()のドキュメントを読んできたhttp://beej.us/guide/bgnet/output/html/multipage/selectman.html

:msdn.microsoft.com/en-us/library/windows/desktop/ms740141を(v = vs.85).aspx

すべてのアイデアをいただければ幸いです。ありがとう!

細目:C++、ウィンXPは、MicrosoftのVisual C++ 2010

私の '最小限' のコードはここにある:あなたが実際に作成前のfd_set構造にあなたのソケットを追加しているhttp://pastebin.com/q9pZ33UK

+2

コードを表示することなく、間違っていることを知る方法がありません。 –

+0

ありがとうございます。私はこの投稿や別のテキストホスティングサイトにコード全体のコンテンツを入れるべきですか?非常に長く、コードの大部分はこの問題と全く無関係です。 – ProGirlXOXO

+0

問題を再現する最小限のコードを作成します。これはまた、問題の根本を理解するための最良の方法です。 –

答えて

3

ソケット:

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); 
+0

いいキャッチです。素敵なグローバル変数:) –

+0

ありがとうございました! – ProGirlXOXO

関連する問題