Какво представляват неблокиращите гнезда?
Какво представляват неблокиращите гнезда?

Видео: Какво представляват неблокиращите гнезда?

Видео: Какво представляват неблокиращите гнезда?
Видео: Какво представляват депозитите и влоговете? 2024, Ноември
Anonim

не - блокиращи гнезда . Решението на този проблем се нарича " не - блокиращи гнезда ". По подразбиране TCP контакти са в " блокиране " режим. Например, когато извикате recv() за четене от поток, контролът не се връща на вашата програма, докато поне един байт данни не бъде прочетен от отдалечения сайт.

Съответно какво е блокиращ и неблокиращ сокет?

В блокиране режим, recv, изпращане, свързване (само TCP) и приемане (само TCP) гнездо API повикванията ще блок за неопределено време до извършване на исканото действие. В не - блокиране режим, тези функции се връщат незабавно. изберете ще блок докато гнездо готово е.

Човек може също да попита, блокират ли се сокетите по подразбиране? от по подразбиране , TCP контакти са поставени в а блокиране режим. Това означава, че контролата не се връща на вашата програма, докато не бъде завършена някаква специфична операция.

Относно това, как се прави неблокиращ сокет?

За да маркирате а гнездо като не - блокиране , използваме системното извикване fcntl. Ето един пример: int flags = guard(fcntl(socket_fd, F_GETFL), "не може да се получат флагове на файлове"); guard(fcntl(socket_fd, F_SETFL, флагове | O_NONBLOCK), "не може комплект флагове на файлове");

Какво е блокиране на сокет?

А гнездо може да бъде в " режим на блокиране " или "неблокираща режим ." Функциите на контакти в блокиране (или синхронно) режим не се връщайте, докато не успеят да завършат действието си. Това се казва блокиране защото гнездо чиято функция е извикана не може да направи нищо - е блокирана - докато повикването се върне.

Препоръчано: