総合手引 | セクション 9 | English | オプション |
#include <sys/types.h>
#include <sys/module.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
struct accept_filter { char accf_name[16]; void (*accf_callback)(struct socket *so, void *arg, int waitflag); void * (*accf_create)(struct socket *so, char *arg); void (*accf_destroy)(struct socket *so); SLIST_ENTRY(accept_filter) accf_next; /* リストの次のエントリ */ };
そのモジュールは、 malloc(9) で割当てられた struct accept_filter 構造体へのポインタを渡す関数 accept_filt_add() を使用して、それを登録するべきです。
struct accept_filter のフィールドは以下の通りです。
accf_name | |
フィルタの名前です。 これはユーザ領域からアクセスされる方法です。 | |
accf_callback | |
接続が確立されたときにカーネルが実行するコールバックです。 これは socket upcall と同等で、そのコールバックがソケットのフラグを 変更しない限りは、接続が確立したとき、 またソケットに新しいデータが届くたびに、呼出されます。 | |
accf_create | |
監視しているソケット上に setsockopt(2) がフィルタをインストールするたびに呼出されます。 | |
accf_destroy | |
ユーザがそのソケット上の accept フィルタを取り除くたびに呼出されます。 | |
accept_filt_add() 関数を使用して登録されたときに accept_filter.accf_name に使用された同じ文字列が accept_filt_del() に渡されると、その後カーネルはそれ以上のユーザ領域の そのフィルタの使用を禁じます。
accept_filt_get() 関数は setsockopt(2) システムコールを介して使用されるための accept フィルタを 見つけるために内部で使用されます。
accept_filt_generic_mod_event() 関数は自分自身をロードおよびアンロードするための引数フィールドを使用 しない accept フィルタのために、コードの重複を避ける単純な方法を提供します。 この関数は DECLARE_MODULE() マクロのために moduledata_t 構造体の中で使用されることが可能です。
accept フィルタの構想は Yahoo!amp; の David Filo によって開拓され、 Alfred Perlstein によってローダブルモジュールシステムに改良されました。
ACCEPT_FILTER (9) | June 25, 2000 |
総合手引 | セクション 9 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.