Tworzenie gniazda jest podobne do żądania linii telefonicznej od firmy telefonicznej. Gniazdo jest mechanizmem, który daje aplikacjom dostęp do sieci, a wiadomości mogą być przesyłane między procesami. Zapewnia ono również niezawodne połączenie. Gniazda są automatycznie rozłączane, gdy są niszczone. Do modyfikacji zachowania gniazda można użyć różnych opcji gniazda. Na przykład, można użyć metod gniazda, aby uzyskać informacje o hoście i lokalnym porcie, który jest podłączony do gniazda. Można również użyć protokołu TCP/IP do wysłania danych do gniazda. Protokół TCP/IP jest niezawodny i ma minimalny narzut.
Obiekt gniazda można utworzyć w trybie blokującym lub nieblokującym. Domyślnie obiekt gniazda jest tworzony w trybie blokującym. Możesz zmienić zachowanie obiektu gniazda za pomocą funkcji settimeout i setblocking.
Gniazdo może zostać utworzone poprzez wywołanie funkcji create. Metoda zwróci cztery krotki, którymi są deskryptor pliku, strumień wejściowy, lista krotek z nazwami interfejsów sieciowych oraz lista informacji o interfejsie sieciowym. Pierwsze dwie krotki będą określały typ gniazda, a ostatnia krotka będzie numerycznym numerem portu. Adres gniazda to adres IP maszyny, a rodzina adresów to AF_INET, AF_INET6 lub AF_NS. W zależności od sieci, struktura adresu gniazda może być inna.
Za pomocą gniazda TCP/IP można wysyłać do zdalnego peera surowe dane, dane pomocnicze lub sformatowane pakiety danych. Gniazdo TCP/IP posiada również mechanizm końca połączenia, który umożliwia zamknięcie połączenia, gdy dane nie są już potrzebne. Możesz również użyć funkcji send_data gniazda, aby zebrać i wysłać do niego normalne dane lub dane pomocnicze. Protokół używany do wysyłania danych będzie zależał od typu gniazda.
Gniazda mogą być również tworzone poprzez wywołanie systemowe. Interfejs ten jest ogólnie używany przez systemy Unix/POSIX i jest podobny do interfejsu wywołania systemowego w systemach Linux i OS X. Jednak w systemie Solaris interfejs ten jest nieco inny. Generalnie, wywołania są przeznaczone do komunikacji bezpołączeniowej, ale niektóre implementacje oferują alternatywne protokoły. Adresy gniazd mogą być określone przez wywołanie systemowe sendmsg lub recvmsg. Można również wywołać wywołanie systemowe shutdonw, aby zamknąć połączenie.
Funkcja receive działa podobnie do funkcji send, ale czeka na nadejście całego pakietu. Jeśli gniazdo nie jest podłączone, funkcja zakończy się niepowodzeniem. Możesz również sprawdzić, czy gniazdo jest w stanie połączonym, używając parametrów h_length i h_addrtype. Parametr h_length powinien wynosić co najmniej 4. Jeśli gniazdo jest w stanie połączonym, możesz zarezerwować wywołania transferu danych. Argument h_addrtype może być nazwą usługi łańcuchowej lub listą adresów IP. Możesz również wywołać metody preferencji wydajności z wartościami (jeden, jeden lub 2). Wskaże to względne znaczenie niskiego opóźnienia, wysokiej przepustowości i krótkiego czasu połączenia protokołu. Większe wartości wskazują na silniejsze preferencje.
Podobne tematy