Network 0x5d


イベントチェック


【機能】

 指定ソケットに対するイベントの状態を取得します。

【関数】

 int Select( int sckmax, unsigned *fdset )
 {
   return trapa_svc( 0x5d, pid, sckmax, fdset );
 }

【入力】

 sckmax チェック範囲 チェックするソケット番号の最大値
 fdset ソケットリスト ソケットリストを格納した領域の先頭アドレス

+0
+1
+2
+3
fdset+00
ソケット1 状態取得可否
ソケット2 状態取得可否
ソケット3 状態取得可否
ソケット4 状態取得可否
fdset+04
ソケット5 状態取得可否
:
:
:

【出力】

 リターンコード 0以上 受信イベントのあるソケットの数

+0
+1
+2
+3
fdset+00
ソケット1 イベントの有無
ソケット2 イベントの有無
ソケット3 イベントの有無
ソケット4 イベントの有無
fdset+04
ソケット5 イベントの有無
:
:
:

ER_PARAM パラメータエラー
ER_PID 不正プロセスID
ER_LANCLOSED LAN未オープン

【解説】

 リストにはソケット番号をインデックスとし、受信イベントの状態を取得するソケットに0を、取得しないソケットには0を予めセットして下さい。ソケット番号の最大値にはリストがどこまで有効か指定して下さい。

 本ファンクションは1がセットされたソケットに対して、イベントの有無をチェックしてイベントが無い場合0をセットします。

 接続要求受付中のソケットの場合、「接続要求受信」のイベントをチェックします。

 クライアント接続を非ブロックで行ったソケットの場合、「接続要求結果受信」のイベントをチェックします。

 接続状態のソケットの場合、「データ受信」・「切断要求受付」・「強制切断」のイベントをチェックします。イベントの分析は【使用例】を参照して下さい。

 UDPソケットの場合、「データパケット受信」のイベントをチェックします。

 上記以外の状態のソケットの場合、イベントは発生しません。

【関連項目】

 ソケット送受信バッファ量取得

【使用例】

 以下はTCP接続状態のソケットのイベントを調べる例です。
 fdset[sck-1] = 1; /* 調べるソケットのマーク */
 if(Select(sck, fdset) > 0 ) {
   /* バッファ量取得 */
   if(LanGetBuff(sck, 1, &cnt, NULL) != OK ) {
      /* 強制切断受信  */
     Close(sck);
   }else{
     if(cnt == 0 ) {
       /* 切断要求受信  */
       Close(sck);
     }else{
       /* データ受信  */
       Recv(sck, data, cnt);
     }
   }
 }