Core Foundation   >   CFSocketSetSocketFlags(_:_:)
関数
CFSocketSetSocketFlags(_:_:)
CFSocket オブジェクトの特定の動作を制御するフラグを設定します。
宣言
パラメータ
s | 変更する CFSocket オブジェクト。 |
flags | s の動作を制御するフラグのビットごとの OR 結合。使用可能なフラグのリストについては、CFSocket Flags を参照してください。 |
議論
flags 引数は、与えられた型の呼び出し関数がトリガされた後で自動的に再び有効にされるかどうか、および s が無効になったときに基底のネイティブソケットが閉じられるかどうかを制御します。
フラグを設定およびクリアするには、フラグ設定のビットをそれぞれ設定およびマスクする必要があります。まず、CFSocketGetSocketFlags(_:) を呼び出し、返された値を変更します。例えば:
リスト 1
CFOptionFlags sockopt = CFSocketGetSocketFlags (mysock ); /* Set the read callback to be automatically reenabled. */ sockopt |= kCFSocketAutomaticallyReenableReadCallBack; /* Clear the close-on-invalidate flag. */ sockopt &= ~kCFSocketCloseOnInvalidate; CFSocketSetSocketFlags(s, sockopt);
デフォルトでは、kCFSocketReadCallBack、kCFSocketAcceptCallBack、および kCFSocketDataCallBack 呼び出し関数は、トリガーされた後に自動的に再び有効になりますが、kCFSocketWriteCallBack 呼び出し関数は有効になりません。kCFSocketConnectCallBack 呼び出し関数は 1 回だけ発生するため、再度有効にすることはできません。
呼び出し関数が自動的に再び有効にされると、条件が真になるたびに呼び出し関数が呼び出されます。たとえば、読み取り待ちのソケット上にデータがある限り、読み取り呼び出し関数が呼び出されます。呼び出し関数が自動的に再び有効化されない場合、呼び出し関数は正確に 1 回呼び出され、CFSocketEnableCallBacks(_:_:) を呼び出してその呼び出し関数を手動で再び有効にするまで、再度呼び出されません。
読み取りと書き込みの呼び出し関数を自動的に再有効化するのは注意してください。そうした場合、呼び出し関数は、ソケットが読み取り可能または書き込み可能のままである限り、繰り返し呼び出されます。
これらのフラグは、CFSocket オブジェクトが実際に所有する呼び出し関数型に対してのみ設定してください。他の呼び出し関数型に設定した結果は定義されていません。
デフォルトでは、s が無効になると、基底にあるネイティブソケットは閉じられます。これを無効にするには、kCFSocketCloseOnInvalidate フラグをクリア (ゼロに) します。これは、CFSocket オブジェクトを破棄したいが、引き続き基底にあるネイティブソケットを使用し続けたい場合に便利です。不要になった時、CFSocket オブジェクトは、無効化されなければなりません。
最初に CFSocket オブジェクトを無効にしないで、基底にあるネイティブソケットを閉じないでください。