listen() -- Biri Beni Arayabilir mi Acaba?
Önceki Sistem Çağrıları veya Felaketleri Sonraki
listen() -- Biri Beni Arayabilir mi Acaba?
Pekala hızımızı biraz değiştirelim. Ya bir yere bağlanmak istemiyorsanız ne olacak? Mesela sırf zevk olsun diye size gelen bağlantıları dinlemek ve bunlarla ilgili gerekeni yapmak istediğinizi var sayalım. Bu tür bir süreç iki aşamalıdır, önce listen() ile dinler sonra da accept() ile gelen çağrıları kabul edersiniz.
Dinleme işlevi oldukça basittir ancak gene de biraz açıklama yapmak gerekiyor:
int listen(int sockfd, int backlog); 
sockfd bin kere söylediğim gibi socket() sistem çağrısı tarafından döndürülmüş olan soket dosya tanımlayıcısı oluyor. backlog ise gelen çağrı kuyruğunda izin verilen bağlantı sayısını gösteriyor. Bu ne mi demek? Şey, yani gelen bağlantı talepleri siz onları accept() ile kabul edene dek bir kuyrukta bekler demek ve işte bu kuyruğun ne kadar uzun olacağını başka bir deyişle sınırını siz belirlersiniz. Pek çok sistem bu sınırı 20 olarak belirler; siz ise mesela 5 veya 10 gibi bir değer kullanabilirsiniz.
Hemen her zamanki gibi, listen() işlevi hata durumunda -1 değerini döndürür ve tabii ki errno değişkenine de ilgili hata numarasını yazar.
Evet, tahmin edebileceğiniz gibi listen() işlevinden önce bind() işlevini çağırmalıyız yoksa işletim sistemi çekirdeği bu dinleme işlemini gelişigüzel bir port üzerinden yapmaya başlar. Eğer gelen bağlantıları dinleyecekseniz çağırmanız gereken işlevler sırası ile şöyledir:
socket();
bind();
listen();
/* accept() buraya gelecek */ 
Burada çok açıklama ve kod yok çünkü zaten kendi kendini açıklıyor. (accept() bölümünde ele alacağımız kod tabii ki daha ayrıntılı olacak.) Bütün bu prosedürdeki en dikktali olunması gerken nokta accept() işlevinin çağrıldığı yer.
Önceki Üst Ana Başlık Sonraki
connect()--Hey, sen! Başlangıç accept() -- "3490 Numaralı Portu Aradığınız İçin Teşekkürler"
Bir Linux Kitaplığı Sayfası