2013-08-06 9 views
15

Nie rozumiałem nic o somaxconn w programowaniu gniazd w C (Linux Ubuntu). Przeszukiwałem kilka stron, ale wszystkie te nie mogły mi pomóc.Co SOMAXCONN oznacza w programowaniu gniazd C?

listen(sockfd,SOMAXCONN); 

Czy to znaczy słuchać jednocześnie maksymalnie do nie. podłączonych gniazd?

Odpowiedz

14
#include <sys/socket.h> 

int listen (int socket, int backlog); 

Portfel argumentem stanowi wskazówkę do wykonania których realizacja powinna wykorzystać do ograniczenia liczby zaległych połączeń w kolejce gniazda słuchać za. Wdrożenia mogą nałożyć limit zaległości i cicho zmniejszyć określoną wartość. Zwykle większa wartość argumentu zaległości skutkuje większą lub równą długością kolejki odsłuchowej. Wdrożenia będą obsługiwać wartości zaległości do SOMAXCONN, określone w <sys/socket.h>.

Jeśli listen() nazywa o wartości argumentu o zaległościach, która jest mniejsza niż 0, funkcja zachowuje się tak, jakby to była wywołana z wartością argumentu backlog 0.

zaległości argument 0 może pozwolić na gniazdo akceptuj połączenia, w którym to przypadku długość kolejki odsłuchowej może być ustawiona na minimalną wartość określoną przez implementację.

Widoczne .

+2

dla tych, które mogą potrzebować, aby łatwo zapamiętać co oznacza somaxconn, myślę, że to skrót od połączeń gniazd Znakomita MAX. Mógłbym się mylić, ale i tak pomaga mi to zapamiętać! :-) – rhgrant10

+3

Lub bardziej prawdopodobne i bardziej zgodne z innymi BSD Sockets #defines, SOcket MAX CONNections lub SOcket MAXimum Connection Number – uchuugaka

+0

Użyj formatowania cytowania dla cytowanego tekstu. – EJP

7

Po prostu, zaległości to maksymalna liczba oczekujących połączeń, które chcesz umieścić w gnieździe .. Ta kolejka jest dostępna, więc możesz obsłużyć połączenie z klienta, podczas gdy inni czekają w kolejce, zaległości określa, jak długo ma to trwać linia być. jeśli więcej klientów spróbuje połączyć się z serwerem, więcej niż zaległości, połączenia te zostaną usunięte.

SOMAXCONN definiuje maksymalną liczbę, jaką można przejść do listen(), która jest 128 w moim systemie.

Możesz przeczytać więcej na ten temat w man page

+0

Te połączenia zostaną usunięte przez system Windows. Zostaną one zignorowane przez inne platformy, co spowoduje, że klient spróbuje ponownie kilka razy, a następnie limit czasu, jeśli nadal nie będzie odpowiedzi. – EJP