Co to są gniazda nieblokujące?
Co to są gniazda nieblokujące?

Wideo: Co to są gniazda nieblokujące?

Wideo: Co to są gniazda nieblokujące?
Wideo: Socket Programming Part - 4 (Blocking vs non blocking sockets) in C/C++ 2024, Listopad
Anonim

nie - blokowanie gniazd . Rozwiązanie tego problemu nazywa się „ nie - blokowanie gniazd ". Domyślnie TCP gniazda są w " bloking Na przykład, kiedy wywołujesz recv() w celu odczytu ze strumienia, sterowanie nie jest zwracane do twojego programu, dopóki co najmniej jeden bajt danych nie zostanie odczytany ze zdalnego serwisu.

Czym więc jest gniazdo blokujące i nieblokujące?

w bloking tryb, odbierz, wyślij, połącz (tylko TCP) i zaakceptuj (tylko TCP) gniazdo elektryczne Wywołania API będą blok na czas nieokreślony do momentu wykonania żądanej czynności. w nie - bloking w trybie, te funkcje wracają natychmiast. wybierz będzie blok dopóki gniazdo elektryczne jest gotowy.

Można też zapytać, czy gniazda są domyślnie blokowane? Za pomocą domyślny , TCP gniazda są umieszczone w bloking tryb. Oznacza to, że kontrolka nie zostanie zwrócona do twojego programu, dopóki jakaś określona operacja nie zostanie zakończona.

W związku z tym, jak zrobić gniazdo nie blokujące?

Aby zaznaczyć gniazdo elektryczne jak nie - bloking , używamy wywołania systemowego fcntl. Oto przykład: int flags = guard(fcntl(socket_fd, F_GETFL), "nie można uzyskać flag plików"); guard(fcntl(socket_fd, F_SETFL, flags | O_NONBLOCK), "nie można ustawić flagi plików");

Co to jest blokowanie gniazd?

A gniazdo elektryczne może być w tryb blokowania ” lub „nieblokujący tryb ”. Funkcje gniazda w bloking (lub synchroniczny) tryb nie wracaj, dopóki nie ukończą swojej akcji. To się nazywa bloking ponieważ gniazdo elektryczne którego funkcja została wywołana nie może nic zrobić - jest zablokowana - do czasu powrotu wywołania.

Zalecana: