3

***背景**** 私は TCP を初めて使用するので、少し基本的な質問があります。データを受信して​​いるソケットで O_NONBLOCK をオンにしようとしています。これまで、O_NONBLOCK、itcl()、および fcntl() を設定するさまざまな方法を試してきました。現在、fcntl() を機能させようとしています。

私の質問: ソケットを接続する前または後に O_NONBLOCK を設定することになっていますか?

**私の現在の fcntl() の実装は、コードの前のリンクに基づいています:

ソケットをブロック モードにリセットする方法 (非ブロック モードに設定した後)。

//set socket to NONBlocking
on = fcntl(Socket,F_GETFL);
on = (on | O_NONBLOCK);
if(fcntl(Socket,F_SETFL,on) < 0)
    {
       perror("turning NONBLOCKING on failed\n");
    }

// DO CONNECT
rc = connect()

ご覧いただきありがとうございます。

4

2 に答える 2

6

あなたはO_NONBLOCKいつでも好きなときに設定することになっています。の前connectにそれを行うconnectと、同様に非ブロッキングになります(戻るEINPROGRESS;書き込み可能な状態が完了するのを待つことができます)selectpoll

于 2013-01-31T18:17:47.187 に答える
0

パート 2 に答えるには、同じコードを使用しますが、O_NONBLOCK ビットをオンではなくオフにします。

于 2013-01-31T22:05:09.503 に答える