socket_select
Belirtilen soket dizileri üzerinde belirtilen zaman aşımı ile
select() sistem çağrısını çalıştırır
&reftitle.description;
intfalsesocket_select
arraynulloku
arraynullyaz
arraynulldiğer
intnulltv_sec
inttv_usec0
socket_select 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.
&reftitle.parameters;
oku
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
socket_read sıfır uzunlukta bir dizge ile döner.)
yaz
Yazmanın engellenmediği görülene kadar (soket yazmaya hazır hale
gelene kadar) dinlenecek soket dizisi.
diğer
Bu dizideki soketler olağan dışı durumlara göre denetlenir.
tv_sec
Saniye cinsinden zaman aşımı. tv_sec ve
tv_usec birlikte select() sistem çağrısının
zamanaşımı bağımsız değişkenini oluşturur.
zamanaşımı, socket_select
dönmeden önce beklenecek azami süreyi belirler.
tv_sec sıfır olabilir; bu durumda
socket_select beklemeden döner. Çağrı yinelemek
için yararlıdır. tv_sec &null; olduğu takdirde
(zaman aşımı yok), socket_select sonsuza kadar
bekleyebilir.
tv_usec
Mikrosaniye cinsinden zaman aşımı. Ayrıntılar için
tv_sec bağımsız değişkenine bakınız.
Dönüşte, soket özkaynaklarının durumlarını belirtmek için dizilerde
değişiklik yapılır.
socket_select 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; socket_select işlevi
dönerken soket durumlarını yansıtacak şekilde bu dizilerde değişiklik
yapar.
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:
- socket_select ile &null; kullanımı
]]>
&reftitle.returnvalues;
Başarı durumunda socket_select, 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 0 döndürür. Bir hata durumunda
&false; döner. Hata kodu socket_last_error ile
alınabilir.
İşlev, 0 değerini anlamlı bir değer olarak
döndürdüğünden == işleci ile yapılan bir sınama &true;
ile sonuçlanacağından hata durumunu sınarken ===
işlecini kullanmalısınız:
- socket_select sonucunu anlamak
]]>
&reftitle.examples;
- socket_select örneği
0) {
/* En azından bir sokette bir şeyler olmuş */
}
?>
]]>
&reftitle.notes;
Bazı soket gerçeklenimlerinin çok dikkatli olmayı gerektirdiğini
bilmeniz gereken bir kaç temel kural:
socket_select 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.
socket_select çağrısından sonra üzerinde hiçbir
işlem yapmayacağınız soket nesnelerini hiçbir diziye eklemeyin.
socket_select 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.
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.
Hemen tüm soket gerçeklenimlerinde diğer
dizisindeki soketlerin band dışı verilerle ilgili olduğu varsayılır.
&reftitle.seealso;
socket_read
socket_write
socket_last_error
socket_strerror