ACCEPT_FILTER(9) FreeBSD カーネル開発者マニュアル ACCEPT_FILTER(9)
名称
accept_filter, accept_filt_add, accept_filt_del, accept_filt_generic_mod_event, accept_filt_get − 入力接続フィルタ |
書式
#include <sys/types.h> int |
accept_filt_add(struct accept_filter *filt); int |
accept_filt_del(char *name); int |
accept_filt_generic_mod_event(module_t mod, int event, void *data); struct accept_filter * |
accept_filt_get(char *name); |
解説 |
accept フィルタは、カーネルが入力接続を前処理することを、アプリケーション が要求することを可能にします。 accept フィルタは、 SO_ACCEPTFILTER の optname で渡すことで、 setsockopt(2) システムコールを介して要求されます。 |
実装に関する注
accept フィルタになりたいモジュールは、システムに struct accept_filter 構 造体を提供しなければなりません。 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 accf_create accf_destroy 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 フィルタ機構は FreeBSD 4.0 で導入されました。 |
作者
このマニュアルページは Alfred Perlstein, Sheldon Hearn および Jeroen Ruigrok van der Werven が書きました。 accept フィルタの構想は Yahoo! の David Filo によって開拓され、 Alfred Perlstein によってローダブルモジュールシステムに改良されました。 FreeBSD 10.0 June 25, 2000 FreeBSD 10.0 |