2017-09-13 17 views
-5

私はというソケットソケットを持っています。誰かが以下のコードを正確に説明してください。 select()のソックに例外条件があることを確認する予定ですが、それは何ですか?どうすればこれらの例外条件がサーバーソケットとクライアントソケットで異なるのですか?ソケットとselect()イントリンシック

fd_set sErr; 
FD_ZERO(&sErr); 
FD_SET(sock, &sErr); 
struct timeval timeout = {0}; // select() will return immediately 
if (select (sock + 1, 0, 0, &sErr, &timeout) > 0) 
    return -1; 
+5

あなたはselectのmanページを読んでいますか? – UKMonkey

+0

CまたはC++のいずれかを選択してください。 –

+0

selectは、読み取り専用の読み取り専用ソケット、読み取りセットで読み取り可能なすべてのソケット、書き込みセットに書き込む準備ができているすべてのソケットをマークします。戻り値は、設定したビット数です。 – midor

答えて

1

言ってやるが、私はバインドと聞いている靴下という名前のサーバソケットを、持っています。誰かが以下のコードを正確に説明してください。

確かに。ソケットにエラーが発生した場合は-1を返します。ソケットの可読性をチェックしたり、ゼロ以外のタイムアウトを使用したりしない限り、これは全く無意味です。他の場所で閉じられている以外のリスニングソケットにはあまり発生しません。

fd_setは、FD_ZEROによって何らかの形でゼロにされるマスクの配列です(asmコードを取得しません)。

FD_ZEROにはアセンブリコードはありません。それは配列をクリアするだけです。

select()は例外を持つ単一ソケット

を返すようになっている(?)

途中でfd_setの何かを変更する可能性があります。

はい。これらFD_SETマスクは

を行うのですか彼らはどのソケット(a)が読める、(b)は書き込み可能であると、(c)エラー保留されています。あなたを教えて何

を靴下に関連返された値がそれはないですか

。戻り値は最後の呼び出し以降に状態が変更されたソケットの番のです。これはドキュメントに明記されています。それを読んだことはありますか?

これらの例外は何ですか?

これらは、のエラーを生じる条件です。read()/recv()/recvfrom()/recvmsg()/send()/sendto()/sendmsg()write()に-1を返し、関連付けられたerrnoの値を返します。

+0

したがって、例外を含むセットを要求することは、クライアントソケットに対してのみ意味がありますか?実際の例外はまだ発生していないので、私はまだこのセットにディスクリプタを入れるのに十分な条件は得られません。申し訳ありませんが、この部分を明確にした仕様や例を見つけることは難しく、ソースコードはあいまいです。 – ZuOverture

+0

私はクライアントのソケットについて何もなかった。私はどんなソケットのポイントも見ません。確かにあなたはソケットのエラー以上のことに興味がありますか? I/Oを実行しない場合、なぜそれを作成したのですか?私はあなたの2番目または3番目の文を理解していません。 – EJP

+0

私は多かれ少なかれ、ソケットディスクリプタを読み書きのfd_setsに入れていることを理解しています。しかし例外条件?実際の例外ではありません。たとえば、1/0を計算したときに得られるようなものです。ソケットから何か操作をしようとすると、そのようなことが起こります。しかし、ソケットで何をすべきか、それはexceptfdsにありますか?私はそれらを閉じようとするべきですか、それとも例外を引き起こすでしょうか? – ZuOverture

関連する問題