LISTEN(2) | Sistem Çağrıları | LISTEN(2) |
İSİM
listen — soket üzerinde bağlantıları dinler
BİLDİRİM
#include <sys/types.h>
/* NOTLAR'a bakın */#include <sys/socket.h>
int listen | (int sockfd, int backlog); |
AÇIKLAMA
listen sockfd
ile gösterilen soketi edilgen soket olarak imler ve accept(2) ile gelen bağlantı isteklerini kabul edecek sokete dönüştürür.
sockfd
değişkeni SOCK_STREAM
veya SOCK_SEQPACKET
türünde bir soketin dosya tanıtıcısıdır.
backlog
değişkeni sockfd
kuyruğunun büyüyebileceği azami uzunluğu tanımlar.
Eğer kuyruk tam dolu olduğunda bir bağlantı isteği gelirse, istemci ECONNREFUSED
hatası alabilir veya kullanılan protokol yeniden aktarımı destekliyorsa, bağlantı isteği görmezden gelinir, böylece tekrar gelen bağlantı isteği kabul edilir.
DÖNÜŞ DEĞERİ
Başarı durumunda sıfır döner. Hata oluşursa -1
döner ve hata errno
değişkenine atanır.
HATALAR
-
EADDRINUSE
-
Başka bir soket aynı portu dinliyor.
-
EADDRINUSE
-
(İnternet alanı soketleri için)
sockfd
ile belirtilen soket, önceden bir adres ile ilişkilendirilmemiş ve soketi geçici bir portla ilişkilendirmeye çalışırken geçici port aralığındaki tüm portların kullanımda olduğu anlaşılmış. ip(7) sayfasındaki/proc/sys/net/ipv4/ip_local_port_range
ile ilgili açıklamaya bakınız. -
EBADF
-
Belirtilen
sockfd
uygun bir dosya tanıtıcısı değil. -
ENOTSOCK
-
Belirtilen
sockfd
'nin bir soketle ilgisi yok. -
ENOTSOCK
-
Soket, listen()'ı destekleyen türde değil.
UYUMLULUK
POSIX.1-2001, POSIX.1-2008, 4.4BSD (listen() ilk defa 4.2BSD ile ortaya çıktı).
NOTLAR
Bağlantıları kabul etmek için aşağıdaki adımlar uygulanır:
-
socket(2) ile soket oluşturulur.
-
Diğer soketlerin oluşturulan sokete bağlanabilmesi için oluşturulan soket, bind(2) kullanılarak yerel adres ile ilişkilendirilir.
-
Gelen bağlantıları kabul etme isteği ve gelen bağlantılar için azami kuyruk uzunluğu listen() ile belirtilir.
-
Gelen bağlantılar accept(2) ile kabul edilir.
POSIX.1'de, <sys/types.h>
dahil edilmeyi gerektirmez ve yine bu başlık dosyası Linux'da gerekmez. Fakat bazı tarihsel (BSD) uygulamalardan ötürü bu başlık dosyası gerekir ve taşınabilir uygulamalar için dahil edilmesi akıllıca olacaktır.
backlog
değişkeninin TCP soketleri üzerindeki etkisi Linux 2.2 ile beraber değişti. Artık, tamamlanmamış bağlantı isteklerinin kuyruk uzunluğunu belirlemek yerine, kabul edilmeyi bekleyen kurulmuş soketlerin kuyruk uzunluğunu belirlemektedir. Tamamlanmamış soketler için azami kuyruk uzunluğu /proc/sys/net/ipv4/tcp_max_syn_backlog
kullanılarak tanımlanabilir. Eşzamanlı çerezler (syncookies) etkinleştirildiğinde, mantıksal olarak azami uzunluk yoktur ve bu ayar yok sayılır. Daha fazla bilgi için tcp(7) sayfasına bakınız.
backlog
değeri, eğer /proc/sys/net/core/somaxonn
'dan daha büyükse, bu değere düşürülür. Linux 5.4'ten bu yana bu dosyanın öntanımlı değeri 4096
'dır; eski çekirdeklerde öntanımlı değer 128
idi. 2.4.15'ten önceki çekirdeklerde SOMAXCONN
'a 128
değeriyle sabitlenmişti.
ÖRNEKLER
bind(2) sayfasına bakınız.
ÇEVİREN
* Özgün Belgenin Lisans ve Telif Hakkı bilgileri: * * Copyright (c) 1983, 1991 The Regents of the University of California. * and Copyright (C) 2007, Michael Kerrisk <mtk.manpages@gmail.com> * All rights reserved. * * %%%LICENSE_START(BSD_4_CLAUSE_UCB) * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * %%%LICENSE_END * * $Id: listen.2,v 1.6 1999/05/18 14:10:32 freitag Exp $ * * Modified Fri Jul 23 22:07:54 1993 by Rik Faith <faith@cs.unc.edu> * Modified 950727 by aeb, following a suggestion by Urs Thuermann * <urs@isnogud.escape.de> * Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com> * Modified 1998 by Andi Kleen * Modified 11 May 2001 by Sam Varshavchik <mrsam@courier-mta.com>