1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-23 22:52:11 +01:00
Files
archived-doc-ja/reference/sockets/functions/socket-create.xml
2021-06-12 02:12:46 +09:00

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
-->