-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy pathsocket-create.xml
More file actions
279 lines (272 loc) · 10.7 KB
/
socket-create.xml
File metadata and controls
279 lines (272 loc) · 10.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
<?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
-->