socklen_t
読み:ソックレン-ティー
外語:socklen_t
CやC++で、accept()で使用される、アドレスの長さを格納する型。
定義
FreeBSDでは、次のように定義される。
sys/socket.h
typedef __socklen_t socklen_t;
sys/_types.h
typedef __uint32_t __socklen_t;
machine/_types.h
typedef unsigned int __uint32_t;
つまり、32ビット環境のFreeBSDでは、間接的にunsigned intで定義される。
由来
accept()の第3引数は、元々はint *で宣言されていた。
POSIXはこれが気に入らなかったらしく、POSIXドラフト版でsize_t *に変更した。しかしBSDソケットインターフェイスの仕様上、ここはintと同じサイズが要求されており、もし本当にsize_tにしてしまうと、size_tの長さがintより長い場合にソケット層が破壊されてしまう。このためクレームが入り、やむを得ずint *と同じ長さのsocklen_t *とすることでお茶が濁された、という経緯がある。
再検索