Zapraszamy do lektury artykułu, który jest wynikiem naszej wspólnej inicjatywy z artidiy.pl
Niezależnie od tego, czy Twoja aplikacja działa w systemie Windows czy Unix, możesz użyć klasy Socket, aby zapewnić ujednolicony zestaw API związanych z gniazdami. Moduł Socket zapewnia dostęp do podstawowych implementacji gniazd systemu operacyjnego, jak również symbolicznych stałych używanych dla gniazd i innych funkcji związanych z gniazdami.
Gniazda są używane do dwukierunkowej komunikacji między procesami. Obiekt gniazda może być utworzony w trybie blokującym lub nieblokującym. Domyślnym trybem pracy gniazda jest zawsze blokowanie. Możesz jednak zmienić tryb obiektu gniazda poprzez wywołanie funkcji settimeout(). Jeśli obiekt gniazda jest w trybie nieblokującym, nie jest on zamykany, dopóki blok nie powróci. Ponadto aplikacja musi sprawdzić, czy wszystkie dane zostały dostarczone.
Funkcja connect() nawiązuje połączenie z serwerem i zwraca 4-tuple zawierające nazwę gniazda, typ protokołu, liczbę wysłanych bajtów oraz liczbę odebranych bajtów. Wartość zwrotna connect() wskazuje, czy połączenie z gniazdem zakończyło się sukcesem, czy nie. W przypadku niepowodzenia connect() zwraca -1.
Funkcja accept() akceptuje połączenie. Funkcje connect() i accept() zwracają zero w przypadku sukcesu, a -1 w przypadku niepowodzenia. W przypadku błędu, funkcje connect() i accept() zwracają kod błędu OSError. Błąd ten jest podklasą obiektu OSError. Obiekt OSError opisuje błąd mający wpływ na gniazdo. Jest on również używany do podniesienia wyjątku na timeout gniazda.
Funkcja send_data() wysyła dane do gniazda. Metoda ta może być użyta do wysłania normalnych danych do gniazda, lub zebrania nieanckich danych z bufora. Jeśli dane wysłane przez send_data zostaną odebrane błędnie, podnosi ona kod błędu OSError.
Funkcja send_data() kontynuuje wysyłanie danych do gniazda, aż wszystkie dane zostaną dostarczone lub metoda send_data zwróci kod błędu OSError. Wartością zwrotną metody send_data jest obiekt typu bytes. Obiekt ancdata zawiera listę krotek zawierających dane pomocnicze. Obiekt ancdata może być określony jako obiekt typu bytes, nazwa usługi łańcuchowej lub ciąg znaków. Parametr backlog może zostać określony w celu określenia liczby nieakceptowanych połączeń, zanim aplikacja odmówi wykonania nowych połączeń.
Funkcja socket_remote_address zwraca zdalny adres gniazda IPv4 lub IPv6. Rodzina adresowa może wpływać na format adresu. Jeśli nie określisz rodziny adresów, gniazdo użyje domyślnego zachowania OS dla swojej rodziny adresów.
Gniazda są używane do komunikacji między procesami na tej samej maszynie. Są one również używane do komunikacji między maszynami. Możesz użyć gniazda do tłumaczenia nazw usług internetowych, a także innych usług sieciowych. Jeśli nie znasz nazwy usługi, możesz użyć getnameinfo(3). Metoda socket_remote_address jest również używana do znalezienia numeru portu zdalnego gniazda IPv4 lub IPv6. Niektóre systemy nie obsługują tej funkcji.
Moduł socket obsługuje kilka metod tworzenia gniazd. Możesz użyć funkcji makefile() do tworzenia gniazd oraz funkcji open() do otwierania gniazd. Możesz również użyć modułu gniazda do zapewnienia dodatkowej funkcjonalności specyficznej dla systemu operacyjnego.