2

既に達成したマルチスレッドとは対照的に、select() を使用して複数のクライアントを処理するサーバーを作成しようとしています。ただし、 select() は何もしていないようです? 私はすべての必要なシステム コールを持っています。bind() から listen() まで、すべて適切なエラー チェックが行われ、問題は返されません。また、問題なくコンパイルされます。

FD_ZERO(&fileDescriptors);
FD_ZERO(&tempSet);
.....
FD_SET(listener, &fileDescriptors);
fdmax = listener;
.....
while(1){
   if(select(fdmax+1, &tempSet, NULL, NULL, &timeout) == -1){
          //error occured
   }
.....
}

クライアントは接続を確立できませんが、WSAGetLastError() はクライアント側で 0 を返します。また、サーバーは、タイムアウトのために 0 を返すことを除けば、決して select() を渡されません。私のコードで問題を確認するのに本当に苦労しています。

4

1 に答える 1

2

listenersetに追加してfileDescriptorsいますが、代わりに (空の) settempSetを に渡していますselect

あなたのコメントでは、実際に「tempSetをfileDescriptorsに等しく設定する」コードがあると言っています。一般に、これを行うことはできません。 の内部構造について何も知らないためfd_set、ディープ コピーが必要なポインタが含まれている可能性があります。

ないのは残念ですが、FD_COPYそういうことです。と を使用して毎回セットを作成する必要がFD_ZEROありFD_SETます。

于 2009-11-06T02:32:18.010 に答える