7.2 組み込みモジュール socket
このモジュールはBSDのsocketインタフェースへのアクセスを提供します。
このインタフェースをサポートするUnixシステムで利用できます。
ソケットプログラミング(Cでの)の入門に関しては、以下の解説を参照して下さい。
An Introductory 4.3BSD Interprocess Communication
Tutorial, by Stuart SechrestおよびAn Advanced 4.3BSD Interprocess
Communication Tutorial, by Samuel J. Leffler et al, 共にUnix Programmer's Manual内にある補足ドキュメント1(セクションPS1:7とPS1:8)。
様々なソケット関連システムコールに関するUnixのマニュアルページもソケットの詳細についての価値ある情報源です。
パイソンのインタフェースはソケットに関するUnixシステムコールとライブラリインタフェースを素直にパイソンのオブジェクト指向スタイルで書き表したものです。
socket()関数は様々なソケットシステムコールをそのメソッドとして実装したソケットオブジェクトを返します。
引数のタイプはCでのインタフェースより幾分高水準です。つまり、パイソンのファイルに対するread()とwrite()操作と同じように、受信操作時のバッファ割り当ては自動的に、送信操作時のバッファ長は暗黙の内に行われます。
ソケットアドレスはAF_UNIXアドレスファミリについては一つの文字列として、
またAF_INETアドレスファミリについては一組の
(host, port)として表現されます。ここでhostは
'daring.cwi.nl'のようなインターネットドメイン表記でのホスト名または
'100.50.200.5'のようなIPアドレスを文字列表現したもので、portは
整数のポート番号です。その他のアドレスファミリは現在サポートされていません。
あるソケットオブジェクトが要求するアドレス形式はそのソケットオブジェクトが
作られたときに指定されたアドレスファミリをもとに自動的に選ばれます。
IPアドレスに関しては、ホストアドレスの代わりに2つの特別な形式が使えます。
つまり空文字列はINADDR_ANYを表し、文字列"<broadcast>"
はINADDR_BROADCASTを表します。
すべてのエラーは例外を発生させます。不当な引き数タイプとメモリ枯渇に関する
通常の例外も発生します。ソケットまたはアドレスの意味に関するエラーは
socket.errorを発生させます。
setblocking()メソッドで非ブロッキングモードがサポートされます。
socketモジュールは以下の定数と関数をエクスポートします。
- error
-
この例外はソケットまたはソケット関連エラーに対して発生します。
附随する値は、何が悪いかを表現した文字列またはos.errorの時と同様に
システムコールが返したエラーを表現した一組の
(errno, string)です。
ベースのOSによって定義されたエラーコードに対する名称を含むモジュール
errno を参照して下さい。
- AF_UNIX
-
- AF_INET
-
これらの定数はアドレス(およびプロトコル)ファミリを表し、socket()の
第一引き数として使われます。AF_UNIX定数ガ定義されていなければ
このプロトコルはサポートされていません。
- SOCK_STREAM
-
- SOCK_DGRAM
-
- SOCK_RAW
-
- SOCK_RDM
-
- SOCK_SEQPACKET
-
これらの定数はソケットタイプを表し、socket()の第2引き数として
使われます。(SOCK_STREAMとSOCK_DGRAMだけが一般的に
役立つようです。)
- SO_*
-
- SOMAXCONN
-
- MSG_*
-
- SOL_*
-
- IPPROTO_*
-
- IPPORT_*
-
- INADDR_*
-
- IP_*
-
これらの形式の多くの定数(ソケットやIPプロトコルに関するUnixの文書で記述されています)もソケットモジュールで定義されています。
これらは通常ソケットオブジェクトのsetsockopt()とgetsockopt()
メソッドに対する引き数として使われます。多くの場合、Unixヘッダファイルで定義
されているシンボルのみが定義されています。若干のシンボルに対してデフォルト値が
与えられています。
- gethostbyname (hostname)
-
ホスト名をIPアドレス形式に翻訳します。そのIPアドレスは'100.50.200.5'
のように文字列として返されます。ホスト名がIPアドレスそれ自身の場合はそのまま
返されます。
- gethostname ()
-
パイソンインタプリタが現在実行されているマシンのホスト名を含む文字列を返します。
現在のマシンのIPアドレスを知りたいときは、gethostbyname(gethostname())
を使って下さい。
注:gethostname()はFQDN(完全に修飾されたドメイン名)を返すとは限りません。gethostbyaddr(gethostname())を使って下さい。(後述)
- gethostbyaddr (ip_address)
-
(hostname, aliaslist, ipaddrlist)を返します。
ここで、hostnameは与えられたip_addressに対応する根本的なホスト名
で、aliaslistは同じアドレスに対する代わりのホスト名一覧
(空かも知れません)で、ipaddrlistは同じホストの同じインタフェースに
対するIPアドレスの一覧(たいていの場合一つのアドレスのみを含みます)です。
FQDNを見つけるためには、hostnameとaliaslistのアイテムをチェックし
少なくとも一つのピリオドを含むエントリを探して下さい。
- getprotobyname (protocolname)
-
インターネットプロトコル名(例えば'icmp')をsocket()関数の
第3引き数(オプション)に渡すために適した定数に翻訳します。
これは普通``raw'' モード (SOCK_RAW)でソケットをオープンするときにのみ
必要です。普通のソケットモードではプロトコルが省略されるか0のときは適切な
プロトコルが自動的に選択されます。
- getservbyname (servicename, protocolname)
-
インターネットサービス名とプロトコル名をそのサービスに対するポート番号に
翻訳します。プロトコル名は'tcp'または'udp'であるべきです。
- socket (family, type[, proto])
-
与えられたアドレスファミリ、ソケットタイプ、プロトコル番号を使って新しいソケット
を生成します。アドレスファミリはAF_INETまたはAF_UNIX
であるべきです。ソケットタイプはSOCK_STREAM、SOCK_DGRAMまたは
その他の"SOCK_"定数のうちの一つであるべきです。
プロトコル番号は通常0ですがその場合は省略してもかまいません。
- fromfd (fd, family, type[, proto])
-
既存のファイルディスクリプタ(ファイルオブジェクトのfileno()メソッド
で返されるような整数)からソケットオブジェクトを作ります。
アドレスファミリ、ソケットタイプ、プロトコル番号は前述のsocket関数
に対するものと同じです。ファイルディスクリプタはソケットであるべきですが
、チェックはされません。ファイルディスクリプタが不当であればそのオブジェクトに対するその後の操作は失敗するかもしれません。
この関数は滅多に必要とはされませんが、標準入力または標準出力としてプログラムに
渡されたソケットのソケットオプションを取り出したり設定したりするために
(例えば、Unixのinetデーモンから起動されるサーバ)使うことが出来ます。
- ntohl (x)
-
32-bit整数をネットワークからホストのバイトオーダに変換します。
ホストのバイトオーダがネットワークのバイトオーダと同じマシンの場合、
これは何もしません。他の場合は4-byteスワップ操作を実行します。
- ntohs (x)
-
16-bit整数をネットワークからホストのバイトオーダに変換します。
ホストのバイトオーダがネットワークのバイトオーダと同じマシンの場合、
これは何もしません。他の場合は2-byteスワップ操作を実行します。
- htonl (x)
-
32-bit整数をホストからネットワークのバイトオーダに変換します。
ホストのバイトオーダがネットワークのバイトオーダと同じマシンの場合、
これは何もしません。他の場合は4-byteスワップ操作を実行します。
- htons (x)
-
16-bit整数をホストからネットワークのバイトオーダに変換します。
ホストのバイトオーダがネットワークのバイトオーダと同じマシンの場合、
これは何もしません。他の場合は2-byteスワップ操作を実行します。
- SocketType
-
これはソケットオブジェクトタイプを表現するパイソンのタイプオブジェクトです。
これはtype(socket(...))と同じです。
guido@python.org