Być może na terminalu serwerowym liczba bieżących żądań przychodzących jest ograniczona. Jeśli połączenia przychodzące przez klienta przybywają szybciej, serwer może przetwarzać dane, kolejka może zostać przeciążona, a przyszłe żądania przychodzące zostaną odrzucone przez wyjątek Econnrefused. Rozmiar tej kolejki jest dostarczany jako parametr metody słuchania. Jednak konfiguracja wywoła wbudowane ograniczenie rozmiaru pakietu.
Z protokołami terminalu pakietu (SOCK_STREAM, SOCK_SEQPACKET), użyj metody Accept (). Akceptuje pierwszy pakiet żądania portu odbierającego, Sockfd, z kolejki przychodzących żądań, ustanawia nowy powiązany port i zawiera nowy konkretny plik dla złącza. Świeżo uformowane połączenie nie jest skonfigurowane do słuchania. Ta funkcja nie wpływa na podstawową końcową sockfd.
Składnia gniazda akceptuj funkcję w języku c
# int Accept (int sockfd, struct sockaddr *addr, socklen_t *addrlen)
Funkcja Accept () zawiera różne parametry, które obejmują sockfd, *addr i *addrlen. Poniżej przedstawiono szczegóły tych argumentów:
Parametr „sockfd” to port, który został opracowany z wykorzystaniem gniazda, podłączony do adresu fizycznego przez wiązanie. Ale czeka także na wpisy po słuchaniu.
Parametr „Addr” to wskaźnik konfiguracji „sockaddr”. Lokalizacja portu rówieśniczego jest określana przez warstwę sieciową i jest podawana w tym elemencie. Klasa IP gniazda wskazuje optymalną składnię IP dostarczoną przez „AddR”. Nic nie zostanie załadowane, gdy parametr „Addr” stanie się zerowy; „Addrlen” nigdy nie był wykorzystywany w tej sytuacji i będzie musiał być również zerowy.
Parametr „addrlen” jest parametrem wyceny: odbiornik może skonfigurować go z wymiarem struktury, o której mowa parametr „Addr” i zapewniłby oryginalny rozmiar portu odniesienia. Jeśli określona pamięć podręczna jest zbyt ograniczona, pobrana wartość zostanie przycięta. W tej sytuacji parametr „addrlen” wytworzy dane wyjściowe znacznie większe niż wartość podana do funkcji.
Funkcja Accept () utrzymuje klienta, chyba że połączenie zostanie znalezione, gdy nie ma żadnych żądań w kolejce, a port nie może być ustawiony jako nie blokujący. Funkcja Accept () pojawia się z wyjątkiem EAGAIN lub EWOLDBLOCK, gdy konfiguracja jest skonfigurowana bez blokowania i nie ma żądań oczekiwania w kolejce.
Przykład funkcji Accept () w języku C w Ubuntu 20.04
Napiszemy program, który pokazuje, że funkcja Accept () opóźnia połączenie.
Najpierw importujemy niektóre wymagane pliki nagłówka. Biblioteka obejmuje zastosowanie standardowych metodologii wejściowych i wyjściowych. Wskazuje różne kategorie symboli i ram, dotyczy funkcjonalności gniazda. Następnie określ symbolizowaną zmienną, która zostanie zastosowana jako węzeł docelowy w ramach podawanych do funkcji, i zajmuje się różnymi funkcjami ciągu. Następnie definiujemy zaległości 3. Zawiera wszystkie istotne czynniki potrzebne do stworzenia zintegrowanego projektu.
Tutaj nazywamy funkcję main (). W ramach funkcji main () inicjujemy niektóre zmienne używane w tym programie. Ogłaszamy wskaźnik strukturalny zmiennej „sockaddr_in my_addr”. Do tworzenia gniazda użyjemy metody Socket (). Dodatkowo byliśmy wiązani za pomocą funkcji bind (). I przypisz wartość funkcji bind () do zmiennej „b”. Metoda Bind () zawiera różne argumenty. W tym przypadku użyliśmy zagnieżdżonego stanu IF-Else. Najpierw definiujemy stan instrukcji „jeśli”. Jeśli wartość zmiennej „B” jest większa niż 0, funkcja printf () drukuje tekst „pomyślnie baken”.
W przeciwnym razie funkcja printf () zatrzymuje wykonywanie programu, wyświetlając komunikat „Błąd powiązania”. Do celów słuchania nazywana jest funkcja słuchania (). Zainicjujemy zmienną „L”, aby przechowywać wartość funkcji słuchania (). Funkcja słuchania () zawiera dwa parametry. Teraz stosujemy warunek wartości słuchania Jeśli wartość „L” jest większa niż 0, nazywana jest metoda printf (), aby pokazać wiadomość „słuchanie”. Funkcja printf () pokazuje „nie słuchanie”, jeśli konkretny warunek nie jest spełniony.
Podobnie, aby zaakceptować żądania systemowe, zastosowaliśmy funkcję Accept (). Jeszcze raz dla tej funkcji użyjemy warunku IF-ELSE. Wartość funkcji Accept () jest przechowywana w zmiennej „ACC”. Jeśli wartość zmiennej „ACC” będzie większa niż 0, wywołujemy metodę wydrukowania linii „zaakceptowaną”. W przeciwnym razie nazywamy instrukcję printf (), aby wydrukować „nie zaakceptowane”. W ten sposób zakończymy kod.
Otrzymujemy tego rodzaju dane wyjściowe po uruchomieniu poprzedniego kodu.
Wniosek
W tym artykule szczegółowo zatrzymaliśmy gniazdo akceptujące 2 c. Funkcja Accept () jest wywoływana w celu zaakceptowania żądań systemu. Musimy zaimportować różne biblioteki przed użyciem funkcji Accept (). Ta funkcja ma parametry odpowiedzialne za różne funkcje. Połączenia systemowe podają konkretny identyfikator pliku dla odebranego portu, jeśli zostaną pomyślnie wykonane. Ale w przypadku błędu kod pokazuje wyjątek, druku -1. Po żądaniu połączenia sieciowego wysyłany jest dostępny sygnał, a użytkownicy używają Accept (), aby odebrać port dla tego rodzaju połączenia.