21 listopada, 2024
Jak zrobić zero w gniazdku

Jak zrobić zero w gniazdku

Gniazda o zerowej sile włożenia to klasa gniazd do układów scalonych (IC), które zaciskają się na układzie scalonym, gdy jest on wkładany i zwalniają go, gdy jest wyjmowany, nie wymagając nacisku na układ scalony lub jego styki. Taka konstrukcja jest znacznym ulepszeniem w stosunku do bardziej powszechnych kontaktów sprężynowych, które chwytają styki układu scalonego przez tarcie podczas wkładania i zwalniania, narażając je na uszkodzenie. Gniazda te są przydatne w aplikacjach, w których układ scalony jest często wkładany lub wyjmowany z gniazda i gdzie ryzyko złamania lub uszkodzenia gniazda jest wysokie.

Gniazdo o zerowej sile włożenia jest również czasami nazywane gniazdem o zerowym nacisku lub gniazdem IC. Gniazda te są szczególnie przydatne w dwóch sytuacjach: 1. Pozwalają na umieszczenie układu scalonego na szczycie gniazda bez wywierania jakiejkolwiek siły w dół na układ scalony, oraz 2. Pozwalają na zaprogramowanie wielu układów scalonych w tym samym gnieździe.

Wykonanie zera w gnieździe jest dość prostym zadaniem i można je wykonać za pomocą zaledwie kilku funkcji Pythona. Podstawową funkcją jest socket_select(), która akceptuje listę tablic zawierających gniazda do sprawdzenia pod kątem zmiany stanu.

Oprócz listy gniazd, metoda select wymaga również listy sekund i mikrosekund, które definiują timeout. Ten timeout może być zerowy, powodując natychmiastowy powrót gniazda; lub może być liczbą całkowitą, pozwalając na bardziej granularną kontrolę nad tym, kiedy socket_select() powróci.

Wartością zwrotną socket_select jest 4-tuple: (data, ancdata, adres, flags). Element data jest obiektem bajtowym, który przechowuje nieanckie dane wysyłane do gniazda; element ancdata jest listą zero lub więcej krotek (cmsg_level, cmsg_type, cmsg_data), gdzie cmsg_level i cmsg_type są liczbami całkowitymi określającymi poziom protokołu i typ specyficzny dla protokołu, a cmsg_data jest obiektem bajtowym przechowującym powiązane dane. Element msg_flags jest bitowym OR różnych flag wskazujących warunki na otrzymanej wiadomości; szczegóły w dokumentacji systemu.

Socket_select() nie zachowuje kluczy gniazd po powrocie, więc ważne jest, aby sprawdzić zwrócone gniazda pod kątem jakichkolwiek zmian ich statusu po wywołaniu. Obejmuje to sprawdzenie tablicy except pod kątem danych out-of-bounds.

Jeśli chcesz sprawdzić wyniki socket_select w pętli foreach, najlepiej jest użyć procedury kopiuj-wklej, takiej jak ta:

Aby wykonać zerowanie w gnieździe, należy wywołać na nim polecenie recv(s, flags), a następnie wysłać dane za pomocą send(s, flags). Dane wysłane do gniazda są konkatenowane z wszelkimi danymi pomocniczymi, które mogły zostać przekazane podczas operacji wysyłania.

Alternatywnie, gniazdo może być skonfigurowane do wysyłania datagramu transportowego zorientowanego na komunikat poprzez ustawienie opcji gniazda przy użyciu s(stdin, stdout) przed wywołaniem send. Oznacza to, że datagram transportowy zorientowany na komunikat jest wysyłany do zdalnego gniazda w miejsce normalnych danych nieankietowych.

Oprócz wysyłania komunikatu o zerowej długości do zdalnego gniazda, gniazda mogą również wysyłać komunikat kontrolny, który kończy połączenie między dwoma procesami. Używanie tych wiadomości może pomóc w zapobieganiu sytuacji, w której proces odbierający zawiesza się i umiera, ale zdalne gniazdo pozostaje otwarte, ponieważ aplikacja nadal przetwarza żądania z tego procesu.

Podobne tematy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *