Bağlantıların Kabul Edilmesi
Önceki Soketlerin Bağlantılarla Kullanılması Sonraki
Bağlantıların Kabul Edilmesi
Bir sunucu bağlantı isteği aldığında, bağlantıyı isteği kabul ederek tamamlayabilir. Bunun için accept işlevi kullanılır.
Sunucu olarak kurulmuş olan bir soket çok sayıda istemciden gelen bağlantı isteklerini kabul edebilir. Sunucunun dinlediği soket bağlantının bir parçası olmaz; bunun yerine, accept bağlantıyla ilgil olarak yeni bir soket oluşturur. accept bu yeni soketin dosya tanımlayıcısını döndürür. Sunucu soketi diğer bağlantı isteklerini dinlemek için kalır.
Sunucu soketindeki bekleyen bağlantı isteği sayısı sınırlıdır. İstemcilerden gelen bağlantı istekleri sunucunun karşılık verebileceğinden hızlı gelirse, kuyruk dolabilir ve ilave istekler ECONNREFUSED hatası ile reddedilebilir. Azami kuyruk uzunluğunu listen işlevinin bir argümanı olarak belirtebilirsiniz; yine de sistem kuyruk uzunluğu için kendi iç sınırını baskın kılabilir.
int accept
(int              soket,
 struct sockaddr *adres,
 socklen_t       *uzunluk_gstr)
işlev
Bu işlev soket sunucu soketindeki bir bağlantı isteğini kabul etmek için kullanılır.
accept işlevi, soket soketi için baskılanamayan kip seçilmediği sürece, süren bir bağlantı yoksa bekler. (baskılanamayan soketlerde de select işlevini kullanarak süren bağlantıların bitmesini beklemek mümkündür.) Dosya Durum Seçenekleri, baskılanamayan kip hakkında bilgi içerir.
adres ve uzunluk_gstr argümanları bağlantıyı başlatan istemci soketinin ismi hakkında bilgi döndürür. Bilginin biçimi hakkında bilgi edinmek için Soket Adresleri bölümüne bakınız.
Bağlantının kabul edilmesi ile bağlantı soket soketinden yapılmaz. Bunun yerine, bağlantı yapılacak yeni bir soket oluşturulur. accept işlevinin normal dönüş değeri yeni soketin dosya tanımlayıcısıdır.
accept işlevinin ardından, soket soketi bağlantısız ve açık olarak kalır ve kapatılıncaya kadar dinlemeye devam eder. soket ile accept işlevini tekrar çağırarak başka bağlantılar kabul edebilirsiniz.
Hata oluşursa accept -1 döndürür. Aşağıdaki errno hata durumları bu işlev için tanımlanmıştır:
EBADF
soket soketi geçerli bir dosya tanımlayıcı değil.
ENOTSOCK
soket dosya tanımlayıcısı bir soket değil.
EOPNOTSUPP
soket dosya tanımlayıcısı bu işlemi desteklemiyor.
EWOULDBLOCK
soket soketi baskılanamayan kipte ve bekleyen bir bağlantı yok.
Bu işlev çok evreli yazılımlar için iptal noktası olarak tanımlanmıştır, bu nedenle ayrılan özkaynakların (bellek, dosya tanımlayıcısı, semafor veya her hangi başka bir kaynak) evre iptal edilse dahi serbest bırakılmasının sağlanması şarttır.
accept işlevi bağlantısız iletişim tarzlarını kullanan soketler için kullanılamaz.
Önceki Üst Ana Başlık Sonraki
Bağlantıların Dinlenmesi Başlangıç Bana Kim Bağlı?
Bir Linux Kitaplığı Sayfası