BSDソケット
BSD ソケットインターフェイスは、汎用インターフェイスであり、ネットワークの 様々な形態をサポートするだけでなく、プロセス間通信の仕組みでもある。 ソケットは通信リンクの一方のエンド(end, 端)を記述するもので、ふたつの通信プロセ スが個別にソケットを持ち、両者の間の通信リンクのそれぞれのエンドを記述する。 ソケットはパイプの特殊なケースであると考えることも可能だが、パイプと異なり、 ソケットは保持できるデータ容量に制限がない。Linux は、いくつかのソケットクラス (socket class)をサポートしており、それらはアドレスファミリ(address family)と 呼ばれている。これは、個々のクラスが独自の通信方式を持っているからである。 Linux は次のようなアドレスファミリもしくはドメイン(domain)をサポートしている。 table:AddressFamilyProtocol
AF_INET インターネットプロトコル。インターネットアドレスファミリ(internet address family)は、 TCP/IP 経由の通信をサポートしている。
AF_ISO ISO標準プロトコル
AF_NS XeroxNetworkSystemsプロトコル
AF_IPX NovellIPXプロトコル
AF_APPLETALK Appletalk
PF_INET AF_INETと同じ
PF_INET6 IPv6
PF_IPX IPX Novell プロトコル
PF_NETLINK カーネルユーザデバイス
PF_X25 ITU-T X.25(ISO-8208プロトコル)
PF_AX25 無線 AX.25プロトコル
PF_ATMPVC ATM PVC
PF_APPLETALK Appletalk
PF_PACKET 低レベルのパケット
AX25 アマチュア無線 X25。
X25 X25
ブロッキングとノンブロッキング
BSDソケットは、ブロッキングとノンブロッキングという2つのモードを持つ。ブロッキング・ソケットは指定されたデータを全て送受信し終わるまで呼び出したライブラリ関数から戻ってこない。これは、ソケットで listen を続けたい場合に困ったことになる。プログラムは決して届かないデータを待って動けなくなる可能性がある。
ブロッキングかノンブロッキングかを指定するには、fcntl() か ioctl() 関数を使う。
注意点
socket() で確保されたリソースは close() を使うまで解放されない。これは、connect() が成功するまで再試行を繰り返すような実装で注意が必要となる。socket() を呼び出したら必ず対応する close() を呼び出す必要がある。close を使うには <unistd.h> をインクルードする必要がある。