-
Notifications
You must be signed in to change notification settings - Fork 24
/
socket-select.xml
257 lines (248 loc) · 8.79 KB
/
socket-select.xml
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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 14dc7c47365f2b71f6c907a5ba5bccf42534d5a9 Maintainer: nilgun Status: ready -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.socket-select">
<refnamediv>
<refname>socket_select</refname>
<refpurpose>Belirtilen soket dizileri üzerinde belirtilen zaman aşımı ile
select() sistem çağrısını çalıştırır</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>int</type><type>false</type></type><methodname>socket_select</methodname>
<methodparam><type class="union"><type>array</type><type>null</type></type><parameter role="reference">oku</parameter></methodparam>
<methodparam><type class="union"><type>array</type><type>null</type></type><parameter role="reference">yaz</parameter></methodparam>
<methodparam><type class="union"><type>array</type><type>null</type></type><parameter role="reference">diğer</parameter></methodparam>
<methodparam><type class="union"><type>int</type><type>null</type></type><parameter>tv_sec</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>tv_usec</parameter><initializer>0</initializer></methodparam>
</methodsynopsis>
<para>
<function>socket_select</function> işlevi bağımsız değişken olarak soket dizileri
alır ve durumları değişinceye kadar bekler. Bu soket dizileri BSD
soketlerinden kaynaklanan bir kabulle dosya tanıtıcıları olarak da
bilinir. İşleve birbirinden bağımsız üç çeşit soket dizisi belirtilebilir.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>oku</parameter></term>
<listitem>
<para>
Karakterlerin okunmaya hazır hale gelmesine kadar (başka bir deyişle,
okumanın engellenmediği görülene kadar) dinlenecek soket dizisi.
(Okunacak tek şeyin dosyasonu karakteri olduğu durumda
<function>socket_read</function> sıfır uzunlukta bir dizge ile döner.)
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>yaz</parameter></term>
<listitem>
<para>
Yazmanın engellenmediği görülene kadar (soket yazmaya hazır hale
gelene kadar) dinlenecek soket dizisi.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>diğer</parameter></term>
<listitem>
<para>
Bu dizideki soketler olağan dışı durumlara göre denetlenir.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>tv_sec</parameter></term>
<listitem>
<para>
Saniye cinsinden zaman aşımı. <parameter>tv_sec</parameter> ve
<parameter>tv_usec</parameter> birlikte select() sistem çağrısının
<literal>zamanaşımı</literal> bağımsız değişkenini oluşturur.
<literal>zamanaşımı</literal>, <function>socket_select</function>
dönmeden önce beklenecek azami süreyi belirler.
<parameter>tv_sec</parameter> sıfır olabilir; bu durumda
<function>socket_select</function> beklemeden döner. Çağrı yinelemek
için yararlıdır. <parameter>tv_sec</parameter> &null; olduğu takdirde
(zaman aşımı yok), <function>socket_select</function> sonsuza kadar
bekleyebilir.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>tv_usec</parameter></term>
<listitem>
<para>
Mikrosaniye cinsinden zaman aşımı. Ayrıntılar için
<parameter>tv_sec</parameter> bağımsız değişkenine bakınız.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<warning>
<para>
Dönüşte, soket özkaynaklarının durumlarını belirtmek için dizilerde
değişiklik yapılır.
</para>
</warning>
<para>
<function>socket_select</function> işlevine üç diziyi de aktarmak zorunda
değilsiniz. Kullanmadığınız dizileri boş bırakabilir veya bir dizi yerine
&null; belirtebilirsiniz. Ayrıca, bu dizilerin gönderimli aktarılmaları
gerektiğine de dikkat ediniz; <function>socket_select</function> işlevi
dönerken soket durumlarını yansıtacak şekilde bu dizilerde değişiklik
yapar.
</para>
<note>
<para>
Zend motorundaki bir sınırlamadan dolayı, bir işleve gönderimli
aktarılması gereken bir bağımsız değişken yerine işleve doğrudan &null; sabitini
aktarmak mümkün değildir. Bu nedenle işleve değeri &null; olan geçici bir
değişken veya son değeri bir değişken olan bir ifade aktarmalısınız:
<example>
<title>- <function>socket_select</function> ile &null; kullanımı</title>
<programlisting role="php">
<![CDATA[
<?php
$diger = NULL;
socket_select($oku, $yaz, $diger, 0);
?>
]]>
</programlisting>
</example>
</para>
</note>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Başarı durumunda <function>socket_select</function>, değişiklik yapılan
soketlerin sayısını döndürür. Eğer hiçbir değişiklik olmaksızın zaman
aşımı dolmuşsa işlev <literal>0</literal> döndürür. Bir hata durumunda
&false; döner. Hata kodu <function>socket_last_error</function> ile
alınabilir.
</para>
<note>
<para>
İşlev, <literal>0</literal> değerini anlamlı bir değer olarak
döndürdüğünden <literal>==</literal> işleci ile yapılan bir sınama &true;
ile sonuçlanacağından hata durumunu sınarken <literal>===</literal>
işlecini kullanmalısınız:
<example>
<title>- <function>socket_select</function> sonucunu anlamak</title>
<programlisting role="php">
<![CDATA[
<?php
$e = NULL;
if (false === socket_select($o, $y, $d, 0)) {
echo "socket_select() başarısız oldu; sebep: " .
socket_strerror(socket_last_error()) . "\n";
}
?>
]]>
</programlisting>
</example>
</para>
</note>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>- <function>socket_select</function> örneği</title>
<programlisting role="php">
<![CDATA[
<?php
/* Oku dizisini hazırlayalım */
$oku = array($soket1, $soket2);
$yaz = NULL;
$diger = NULL;
$degisen_soket_sayısı = socket_select($oku, $yaz, $diger, 0);
if ($degisen_soket_sayısı === false) {
/* Hata işlemleri */
} else if ($degisen_soket_sayısı > 0) {
/* En azından bir sokette bir şeyler olmuş */
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Bazı soket gerçeklenimlerinin çok dikkatli olmayı gerektirdiğini
bilmeniz gereken bir kaç temel kural:
<itemizedlist>
<listitem>
<simpara>
<function>socket_select</function> işlevini daima zaman aşımsız
kullanmaya çalışın. İşe yarar bir veri yoksa betiğiniz hiçbir işlem
yapmamalıdır. Zaman aşımlarına bağımlı bir kod taşınabilir değildir ve
hata ayıklamak çok zor olur.
</simpara>
</listitem>
<listitem>
<simpara>
<function>socket_select</function> çağrısından sonra üzerinde hiçbir
işlem yapmayacağınız soket nesnelerini hiçbir diziye eklemeyin.
<function>socket_select</function> döndükten sonra dizilerdeki tüm
soketlere mutlaka bakılmalıdır. Yazmaya hazır soketlere
yazılmalı, okunmaya hazır soketler okunmalıdır.
</simpara>
</listitem>
<listitem>
<simpara>
Diziden dönen bir sokete oku veya yaz işlemi yapacaksanız verinin
tamamını okumak veya yazmak zorunda değilsiniz. Sadece bir bayt
okumaya veya yazmaya bile hazır olmalısınız.
</simpara>
</listitem>
<listitem>
<simpara>
Hemen tüm soket gerçeklenimlerinde <parameter>diğer</parameter>
dizisindeki soketlerin band dışı verilerle ilgili olduğu varsayılır.
</simpara>
</listitem>
</itemizedlist>
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>socket_read</function></member>
<member><function>socket_write</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
-->