socket_create

(PHP 4 >= 4.1.0)

socket_create -- ソケットを作成する(通信時の終端)

説明

resource socket_create ( int domain, int type, int protocol)

通信の終端と呼ばれることもあるソケットのリソースを作成し、返します。 典型的なネットワーク接続は、2つのソケットから成り立ちます。このとき、 片方はクライアント、もう片方はサーバの役割をします。

パラメータdomainはソケットが利用する プロトコルファミリーを指定します。

表 1指定可能なアドレス/プロトコルファミリーの一覧

プロトコル説明
AF_INET IPv4 インターネットプロトコル。 このプロトコルファミリーに属すプロトコルにはよく知られている TCP と UDP があります。
AF_UNIX ローカルでのコミュニケーションに用いられるプロトコルファミリーです。 高い効率と低いオーバーヘッドを誇るため、IPC (プロセス間通信) でよく使われます。

typeパラメータはソケットが利用する通信のタイプを 指定します。

表 2利用できるソケットのタイプ

タイプ説明
SOCK_STREAM このタイプでは、時系列的な、信頼性の高い、全二重で、接続指向型の バイトストリームが利用できます。 帯域外のデータ転送メカニズムに関しては、サポートされている場合と、 そうでない場合があります。 TCP プロトコルは、このソケットタイプに基づきます。
SOCK_DGRAM このタイプでは、データグラム(非接続型で、信頼性の高くない 固定バイト長のメッセージ) がサポートされます。 UDP プロトコルは、このソケットタイプに基づきます。
SOCK_SEQPACKET このタイプでは、時系列的な、信頼性のある、双方向の接続指向型の 固定長データグラム転送が利用できます。 パケットを消費する側は、一つのパケット全部を一度の read コールで 読み込む必要があります。
SOCK_RAW このタイプでは、素のネットワークプロトコルを操作できます。 この特殊なソケットを使って、どのタイプのプロトコルでもユーザの手で 構築することができます。よくある使い方として、(ping や traceroute などで行われているような) ICMP リクエストの作成があります。
SOCK_RDM このタイプでは、信頼に足る、非時系列的なデータグラム転送が 利用できます。 ほとんどのオペレーティングシステムでは実装されていないでしょう。

protocol は、ソケット上の通信で使われる domain で指定されたファミリーに属するプロトコルを 指定します。正しい値は、getprotobyname() を使うことで取得できます。利用したいプロトコルが、TCP または UDP の場合は、定数 SOL_TCPSOL_UDP を指定することもできます。

表 3共通なプロトコルの一覧

プロトコル名説明
icmp Internet Control Message Protocol は、主にゲートウェイやホストが、 データグラム通信におけるエラーを報告するのに使われます。 "ping" コマンド (最近のほとんどのオペーレーティングシステムに 搭載されています) が ICMP アプリケーションの一例です。
udp User Datagram Protocol は、非接続指向の、信頼性の高くない、 固定のレコード長を用いるプロトコルです。このような側面のおかげで、 UDP はプロトコルとして最小限のオーバーへッドしか要求しません。
tcp Transmission Control Protocol は、信頼性の高い、接続指向かつ ストリーム指向の全二重通信プロトコルです。TCP は、 すべてのパケットが、送信された順序で(時系列的に)受信されることを 保証します。もし、何らかの理由でパケットが通信中に失われた場合、 TCP では、送信先から通知があるまで、パケットが再送信されるように なっています。信頼性とパフォーマンス上の理由から、TCP の実装は、 下層にあるデータグラム通信レイヤーのオクテット幅を 適当な長さに決定します。このため、TCP アプリケーションは、 レコードの全部が一度に転送されない場合も考慮しなければなりません。

成功時に有効な記述子を返し、失敗時に FALSE を返します。 実際のエラーコードは、socket_last_error() を 呼ぶことにより取得できます。このエラーコードをさらに socket_strerror()に渡すことにより、 エラーの内容を文字列で取得することが可能です。

注意 もし domaintype に 不正な値が与えられた場合、socket_create() は、これらを それぞれ AF_INETSOCK_STREAM であるとみなし、E_WARNING メッセージを出します。

socket_accept(), socket_bind(), socket_connect(), socket_listen(), socket_strerror(), socket_get_status()も参照下さい。