筑波大学 システム情報系 情報工学域 新城 靖 <yas@cs.tsukuba.ac.jp>
このページは、次の URL にあります。
https://www.coins.tsukuba.ac.jp/~syspro/2024/2024-07-03/socket-api.html
あるいは、次のページから手繰っていくこともできます。
https://www.coins.tsukuba.ac.jp/~syspro/2024/
http://www.coins.tsukuba.ac.jp/~yas/
Unix 系のオペレーティング・システム上でTCP/IPを使うプログラムを開発する には、ソケットAPIを用いる。ソケットは、TCP/IP をはじめとして、XNS, OSI などさまざまな通信プロトコルを UNIX オペレーティング・システム上で使う ために設計されたものである。TCP/IP だけを考えると、ソケットAPI は、繁雑 であり、使いにくくなっている。
UNIXでは、ソケットをドメイン(Protocol Family)と型で区別する。 下の表は、socket() システム・コールに与えるドメインと型である。
ドメイン | 型 | option | プロトコル |
---|---|---|---|
PF_INET | SOCK_STREAM | 0 | TCP/IP |
PF_INET | SOCK_DGRAM | 0 | UDP/IP |
PF_INET | SOCK_RAW | ? | IP,ICMPなど |
PF_INET6 | SOCK_STREAM | 0 | TCP/IP(IPv6) |
PF_INET6 | SOCK_DGRAM | 0 | UDP/IP(IPv6) |
PF_UNIX | SOCK_STREAM | 0 | 同一ホスト内(Unixドメイン)のストリーム |
PF_UNIX | SOCK_DGRAM | 0 | 同一ホスト内(Unixドメイン)のデータグラム |
PF_NS | SOCK_STREAM | ? | Xerox Network Systems protocol のストリーム(SPP) |
PF_NS | SOCK_SEQPACKET | ? | Xerox Network Systems protocol の順序付きパケット |
PF_NS | SOCK_RDM | ? | Xerox Network Systems protocol の信頼性のあるデータグラム |
これ以外の組み合わせ、使えない。たとえば、PF_INETとSOCK_SEQPACKET を socket システム・コールで指定しても、うまくいかない。
名前 | 説明 |
---|---|
socket() | 通信プロトコルに対応したソケット・オブジェクトを作成する |
connect() | 結合(conection)を確立させる。サーバのアドレスを固定する。 |
listen() | サーバ側で接続要求の待ち受けを開始する。 |
accept() | サーバ側で接続されたソケットを得る。 |
bind() | ソケットにアドレス(名前)を付ける。 |
getpeername() | 通信相手のアドレス(名前)を得る。 |
getsockname() | 自分のアドレス(名前)を得る。 |
send(),sendto(),sendmsg() | メッセージを送信する。 |
recv(),recvfrom(),recvmsg() | メッセージを受信する。 |
shutdown() | 双方向の結合を部分的に切断する。 |
getsockopt() | オプションの現在の値を取得する。 |
setsockopt() | オプションを設定する。 |
select(), poll() | 複数の入出力(通信を含む)を多重化する。 |
write() | メッセージを送信する。ファイルと共通。 |
read() | メッセージを受信する。ファイルと共通。 |
close() | ファイル記述子(ファイルディスクリプタ)を閉じる。他に参照しているファイル記述子が なければ、ソケット・オブジェクトを削除する。ファイルと共通。 |