mirror of
https://github.com/php/doc-ja.git
synced 2026-03-23 22:52:11 +01:00
280 lines
11 KiB
XML
280 lines
11 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: a871ef72edf436c59422dedd538594db2541d5f1 Maintainer: hirokawa Status: ready -->
|
|
<!-- CREDITS: takagi -->
|
|
<refentry xml:id="function.socket-create" xmlns="http://docbook.org/ns/docbook">
|
|
<refnamediv>
|
|
<refname>socket_create</refname>
|
|
<refpurpose>ソケット(通信時の終端)を作成する</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsect1 role="description">
|
|
&reftitle.description;
|
|
<methodsynopsis>
|
|
<type class="union"><type>Socket</type><type>false</type></type><methodname>socket_create</methodname>
|
|
<methodparam><type>int</type><parameter>domain</parameter></methodparam>
|
|
<methodparam><type>int</type><parameter>type</parameter></methodparam>
|
|
<methodparam><type>int</type><parameter>protocol</parameter></methodparam>
|
|
</methodsynopsis>
|
|
<para>
|
|
通信のエンドポイント(終端)と呼ばれることもある <classname>Socket</classname> クラスのインスタンスを作成し、
|
|
返します。典型的なネットワーク接続は、2つのソケットから成り立ちます。
|
|
このとき、片方はクライアント、もう片方はサーバーの役割をします。
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="parameters">
|
|
&reftitle.parameters;
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><parameter>domain</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
パラメータ <parameter>domain</parameter> には、
|
|
ソケットが利用するプロトコルファミリーを指定します。
|
|
</para>
|
|
<table>
|
|
<title>指定可能なアドレス/プロトコルファミリーの一覧</title>
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>ドメイン</entry>
|
|
<entry>説明</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry><constant>AF_INET</constant></entry>
|
|
<entry>
|
|
IPv4 インターネットプロトコル。
|
|
このプロトコルファミリーに属するプロトコルとしてよく知られているのは、
|
|
TCP や UDP です。
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><constant>AF_INET6</constant></entry>
|
|
<entry>
|
|
IPv6 インターネットプロトコル。TCP と UDP
|
|
が、このプロトコルファミリーで一般的なプロトコルです。
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><constant>AF_UNIX</constant></entry>
|
|
<entry>
|
|
ローカルでのコミュニケーションに用いられるプロトコルファミリーです。
|
|
高い効率と低いオーバーヘッドを誇るため、IPC (プロセス間通信)
|
|
でよく使われます。
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>type</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
<parameter>type</parameter> パラメータは、
|
|
ソケットが利用する通信方式を指定します。
|
|
</para>
|
|
<table>
|
|
<title>利用できるソケットのタイプ</title>
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>タイプ</entry>
|
|
<entry>説明</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry><constant>SOCK_STREAM</constant></entry>
|
|
<entry>
|
|
このタイプでは、時系列的、高信頼性、全二重、接続型のバイトストリームが利用できます。
|
|
帯域外のデータ転送メカニズムがサポートされている場合もあります。
|
|
TCP プロトコルは、このソケットタイプに基づきます。
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><constant>SOCK_DGRAM</constant></entry>
|
|
<entry>
|
|
このタイプでは、データグラム(非接続型で、信頼性の高くない
|
|
固定バイト長のメッセージ) がサポートされます。
|
|
UDP プロトコルは、このソケットタイプに基づきます。
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><constant>SOCK_SEQPACKET</constant></entry>
|
|
<entry>
|
|
このタイプでは、時系列的な、信頼性のある、
|
|
双方向の接続指向型の固定長データグラム転送が利用できます。
|
|
パケットを消費する側は、一つのパケット全部を一度の
|
|
read コールで読み込む必要があります。
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><constant>SOCK_RAW</constant></entry>
|
|
<entry>
|
|
このタイプでは、素のネットワークプロトコルを操作できます。
|
|
この特殊なソケットを使って、どのタイプのプロトコルでもユーザーの手で構築することができます。
|
|
よくある使い方として、(ping のような) ICMP リクエストの作成があります。
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><constant>SOCK_RDM</constant></entry>
|
|
<entry>
|
|
このタイプでは、信頼に足る、非時系列的なデータグラム転送が利用できます。
|
|
ほとんどのオペレーティングシステムでは実装されていないでしょう。
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>protocol</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
<parameter>protocol</parameter> は、ソケット上の通信で使われる
|
|
<parameter>domain</parameter> で指定されたファミリーに属するプロトコルを指定します。
|
|
正しい値は、<function>getprotobyname</function>
|
|
を使うことで取得できます。利用したいプロトコルが、TCP または UDP
|
|
の場合は、定数 <constant>SOL_TCP</constant> と
|
|
<constant>SOL_UDP</constant> を指定することもできます。
|
|
</para>
|
|
<table>
|
|
<title>一般的なプロトコルの一覧</title>
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>名称</entry>
|
|
<entry>説明</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>icmp</entry>
|
|
<entry>
|
|
Internet Control Message Protocol は、主にゲートウェイやホストが、
|
|
データグラム通信におけるエラーを報告するのに使われます。
|
|
"ping" コマンド (最近のほとんどのオペーレーティングシステムに
|
|
搭載されています) が ICMP アプリケーションの一例です。
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>udp</entry>
|
|
<entry>
|
|
User Datagram Protocol は、非接続指向の、信頼性の高くない、
|
|
固定のレコード長を用いるプロトコルです。このような側面のおかげで、
|
|
UDP はプロトコルとして最小限のオーバーへッドしか要求しません。
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry>tcp</entry>
|
|
<entry>
|
|
Transmission Control Protocol は、信頼性の高い、接続指向かつ
|
|
ストリーム指向の全二重通信プロトコルです。TCP は、
|
|
すべてのパケットが、送信された順序で(時系列的に)受信されることを
|
|
保証します。もし、何らかの理由でパケットが通信中に失われた場合、
|
|
TCP では、送信先から通知があるまで、パケットが再送信されるように
|
|
なっています。信頼性とパフォーマンス上の理由から、TCP の実装は、
|
|
下層にあるデータグラム通信レイヤーのオクテット幅を
|
|
適当な長さに決定します。このため、TCP アプリケーションは、
|
|
レコードの全部が一度に転送されない場合も考慮しなければなりません。
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="returnvalues">
|
|
&reftitle.returnvalues;
|
|
<para>
|
|
<function>socket_create</function> は、
|
|
成功時に <classname>Socket</classname> クラスのインスタンス、
|
|
失敗時に &false; を返します。
|
|
実際のエラーコードは、<function>socket_last_error</function> を
|
|
コールすることにより取得できます。このエラーコードをさらに
|
|
<function>socket_strerror</function>に渡すことにより、
|
|
エラーの内容を文字列で取得することが可能です。
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="errors">
|
|
&reftitle.errors;
|
|
<para>
|
|
<parameter>domain</parameter> や <parameter>type</parameter> に
|
|
不正な値が与えられた場合、<function>socket_create</function> は、これらを
|
|
それぞれ <constant>AF_INET</constant> と <constant>SOCK_STREAM</constant>
|
|
であるとみなし、<constant>E_WARNING</constant> メッセージを出します。
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="changelog">
|
|
&reftitle.changelog;
|
|
<informaltable>
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>&Version;</entry>
|
|
<entry>&Description;</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>8.0.0</entry>
|
|
<entry>
|
|
成功した場合に、この関数は
|
|
<classname>Socket</classname> クラスのインスタンスを返すようになりました。
|
|
これより前のバージョンでは、リソースを返していました。
|
|
</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</refsect1>
|
|
|
|
<refsect1 role="seealso">
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><function>socket_accept</function></member>
|
|
<member><function>socket_bind</function></member>
|
|
<member><function>socket_connect</function></member>
|
|
<member><function>socket_listen</function></member>
|
|
<member><function>socket_last_error</function></member>
|
|
<member><function>socket_strerror</function></member>
|
|
</simplelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
</refentry>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|