17.2.1 socket オブジェクト
ソケットオブジェクトは以下のメソッドを持ちます。makefile()以外
のメソッドは、Unixのソケット用システムコールに対応しています。
-
接続を受け付けます。ソケットはアドレスにbind済みで、listen中である必要が
あります。戻り値は
(conn, address)
のペアで、conn
は接続を通じてデータの送受信を行うための新しいソケットオブジェク
ト、addressは接続先でソケットにbindしているアドレスを示します。
-
ソケットをaddressにbindします。bind済みのソケットを再バインドする
事はできません。addressのフォーマットはアドレスファミリによって異
なります(前述)。
注意:
本来、このメソッドは単一のタプルのみを引数として受け付けますが、
以前はAF_INETアドレスを示す二つの値を指定する事ができました。
これは本来の仕様ではなく、Python 2.0以降では使用することはできません。
-
ソケットをクローズします。以降、このソケットでは全ての操作が失敗します。
リモート端点ではキューに溜まったデータがフラッシュされた後はそれ以上の
データを受信しません。ソケットはガベージコレクション時に自動的にクローズ
されます。
-
addressで示されるリモートソケットに接続します。addressのフ
ォーマットはアドレスファミリによって異なります(前述)。
注意:
本来、このメソッドは単一のタプルのみを引数として受け付けますが、
以前はAF_INETアドレスを示す二つの値を指定する事ができました。
これは本来の仕様ではなく、Python 2.0以降では使用することはできません。
-
connect(address)
と同様ですが、C言語のconnect()
関数の呼び出しでエラーが発生した場合には例外を送出せずにエラーを戻り値と
して返します。(これ以外の、``host not found,''等のエラーの場合には例外が
発生します。)処理が正常に終了した場合には0
を返し、エラー時には
errnoの値を返します。この関数は、非同期接続をサポートする場合な
どに使用することができます。
注意:
本来、このメソッドは単一のタプルのみを引数として受け付けますが、
以前はAF_INETアドレスを示す二つの値を指定する事ができました。
これは本来の仕様ではなく、Python 2.0以降では使用することはできません。
-
ソケットのファイルディスクリプタを整数型で返します。ファイルディスクリプ
タは、select.select()などで使用します。
Windowsではこのメソッドで返された小整数をファイルディスクリプタを扱う箇
所(os.fdopen()など)で利用できません。
Unix にはこの制限はありません。
-
ソケットが接続しているリモートアドレスを返します。この関数は、リモート
IPv4/v6ソケットのポート番号を調べる場合などに使用します。addressの
フォーマットはアドレスファミリによって異なります(前述)。この関数をサポー
トしていないシステムも存在します。
-
ソケット自身のアドレスを返します。この関数は、IPv4/v6ソケットのポート番
号を調べる場合などに使用します。addressのフォーマットはアドレスフ
ァミリによって異なります(前述)。
getsockopt( |
level, optname[, buflen]) |
-
ソケットに指定されたオプションを返します(Unixのマニュアルページ
getsockopt(2)を参照)。SO_*等のシンボルは、このモジ
ュールで定義しています。buflenを省略した場合、取得するオブションは
整数とみなし、整数型の値を戻り値とします。buflenを指定した場合、長
さbuflenのバッファでオプションを受け取り、このバッファを文字列とし
て返します。このバッファは、呼び出し元プログラムでstruct
モジュール等を利用して内容を読み取ることができま
す。
-
ソケットをListenし、接続を待ちます。引数backlogには接続キューの最
大の長さ(1以上)を指定します。backlogの最大数はシステムに依存します
(通常は5)。
makefile( |
[mode[, bufsize]]) |
-
ソケットに関連付けられたファイルオブジェクトを返します(ファイルオ
ブジェクトについては3.9の``ファイルオブジェクト''を
参照)。ファイルオブジェクトはソケットをdup()したファイルディ
スクリプタを使用しており、ソケットオブジェクトとファイルオブジェクトは
別々にクローズしたりガベージコレクションで破棄したりする事ができます。ソ
ケットはブロッキングモードでなければなりません。
オプション引数のmodeとbufsize
には、file()組み込み関数と同じ値を指定します。
2.1の``組み込み関数''を参照してください。
-
ソケットからデータを受信し、文字列として返します。受信する最大バイト数
は、bufsizeで指定します。flagsのデフォルト値は0です。値の意
味についてはUnixマニュアルページのrecv(2)を参照してくださ
い。
注意:
ハードウェアおよびネットワークの現実に最大限マッチするように、
bufsizeの値は比較的小さい2の累乗、たとえば 4096、にすべきです。
recvfrom( |
bufsize[, flags]) |
-
ソケットからデータを受信し、結果をタプル
(string,
address)
として返します。stringは受信データの文字列で、
addressは送信元のアドレスを示します。オプション引数flagsの意
味は、上記recv()と同じです。addressのフォーマットはアドレ
スファミリによって異なります(前述)。
-
ソケットにデータを送信します。ソケットはリモートソケットに接続済みでなけ
ればなりません。オプション引数flagsの意味は、上記recv()と
同じです。戻り値として、送信したバイト数を返します。アプリケーションで
は、必ず戻り値をチェックし、全てのデータが送られた事を確認する必要があり
ます。データの一部だけが送信された場合、アプリケーションで残りのデータを
再送信してください。
sendall( |
string[, flags]) |
-
ソケットにデータを送信します。ソケットはリモートソケットに接続済みでなけ
ればなりません。オプション引数flagsの意味は、上記recv()と
同じです。send()と異なり、このメソッドはstringの全データ
を送信するか、エラーが発生するまで処理を継続します。正常終了の場合は
None
を返し、エラー発生時には例外が発生します。エラー発生時、送信
されたバイト数を調べる事はできません。
sendto( |
string[, flags], address) |
-
ソケットにデータを送信します。このメソッドでは接続先をaddressで指
定するので、接続済みではいけません。オプション引数flagsの意味は、
上記recv()と同じです。戻り値として、送信したバイト数を返しま
す。addressのフォーマットはアドレスファミリによって異なります(前
述)。
-
ソケットのブロッキング・非ブロッキングモードを指定します。flagが0
の場合は非ブロッキングモード、0以外の場合はブロッキングモードとなりま
す。全てのソケットは、初期状態ではブロッキングモードです。非ブロッキング
モードでは、recv()メソッド呼び出し時に読み込みデータが無かった
りsend()メソッド呼び出し時にデータを処理する事ができないような
場合にerror例外が発生します。しかし、ブロッキングモードでは
呼び出しは処理が行われるまでブロックされます。
s.setblocking(0)
は
s.settimeout(0)
と、s.setblocking(1)
は
s.settimeout(None)
とそれぞれ同じ意味を持ちます。
-
ソケットのブロッキング処理のタイムアウト値を指定します。valueに
は、正の浮動小数点で秒数を指定するか、もしくは
None
を指定します。
浮動小数点値を指定した場合、操作が完了する前にvalueで指定した秒数
が経過するとtimeoutが発生します。タイムアウト値にNone
を
指定すると、ソケットのタイムアウトを無効にします。
s.settimeout(0.0)
はs.setblocking(0)
と、
s.settimeout(None)
はs.setblocking(1)
とそれぞれ同じ意味を持
ちます。
バージョン 2.3 で 新たに追加 された仕様です。
-
ソケットに指定されたタイムアウト値を取得します。タイムアウト値が設定され
ている場合には浮動小数点型で秒数が、設定されていなければ
None
が返
ります。この値は、最後に呼び出されたsetblocking()または
settimeout()によって設定されます。
バージョン 2.3 で 新たに追加 された仕様です。
ソケットのブロッキングとタイムアウトについて:ソケットオブジェクトのモー
ドは、ブロッキング・非ブロッキング・タイムアウトの何れかとなります。初期
状態では常にブロッキングモードです。ブロッキングモードでは、処理が完了す
るまでブロックされます。非ブロッキングモードでは、処理を行う事ができなけ
れば(不幸にもシステムによって異なる値の)エラーとなります。タイムアウト
モードでは、ソケットに指定したタイムアウトまでに完了しなければ処理は失敗
となります。setblocking()メソッドは、settimeout()の省
略形式です。
内部的には、タイムアウトモードではソケットを非ブロッキングモードに設定し
ます。ブロッキングとタイムアウトの設定は、ソケットと同じネットワーク端点
へ接続するファイルディスクリプタにも反映されます。この結果、
makefile()で作成したファイルオブジェクトはブロッキングモードで
のみ使用することができます。これは非ブロッキングモードとタイムアウトモー
ドでは、即座に完了しないファイル操作はエラーとなるためです。
註: connect()はタイムアウト設定に従います。一般的に、
settimeout()をconnect()の前に呼ぶことをおすすめします。
setsockopt( |
level, optname, value) |
-
ソケットのオプションを設定します(Unixのマニュアルページ
setsockopt(2)を参照)。SO_*等のシンボルは、このモジ
ュールで定義しています。
value
には、整数または文字列をバッファとし
て指定する事ができます。文字列を指定する場合、文字列には適切なビットを設
定するようにします。(structモジュール
を利用すれば、Cの構造体を文字列にエンコードする事ができます。)
-
接続の片方向、または両方向を切断します。howがSHUT_RDの場合、以降
は受信を行えません。howがSHUT_WRの場合、以降は送信を行えません。
howが
SHUT_RDWR
の場合、以降は送受信を行えません。
read()メソッドとwrite()メソッドは存在しませんので注意
してください。代わりにflagsを省略したrecv()と
send()を使うことができます。
ソケットオブジェクトには以下の socket コンストラクタに
渡された値に対応した(読み出し専用)属性があります。
- family
-
ソケットファミリー。
バージョン 2.5 で 新たに追加 された仕様です。
- type
-
ソケットタイプ。
バージョン 2.5 で 新たに追加 された仕様です。
- proto
-
ソケットプロトコル。
バージョン 2.5 で 新たに追加 された仕様です。
リリース 2.5 ,19th September, 2006 更新
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。