Čo sú to neblokujúce zásuvky?
Čo sú to neblokujúce zásuvky?

Video: Čo sú to neblokujúce zásuvky?

Video: Čo sú to neblokujúce zásuvky?
Video: The Macabre Experiment - Những thí nghiệm đáng sợ | Cờ Su Original 2024, Smieť
Anonim

nie - blokovacie zásuvky . Riešenie tohto problému sa nazýva " nie - blokovacie zásuvky ". Štandardne TCP zásuvky sú v " blokovanie Napríklad, keď zavoláte recv() na čítanie z prúdu, riadenie sa vášmu programu nevráti, kým sa zo vzdialeného miesta neprečíta aspoň jeden bajt údajov.

Čo je teda blokujúca a neblokujúca zásuvka?

In blokovanie režim, recv, odoslať, pripojiť (iba TCP) a prijať (iba TCP) zásuvka Hovory API budú blokovať na dobu neurčitú, kým sa nevykoná požadovaná akcia. In nie - blokovanie režimu sa tieto funkcie okamžite vrátia. vybrať vôľu blokovať až pokým zásuvka je hotový.

Niekto sa môže tiež opýtať, či sú zásuvky štandardne blokované? Autor: predvolená , TCP zásuvky sú umiestnené v a blokovanie režim. To znamená, že ovládací prvok nie je vrátený do vášho programu, kým sa nedokončí nejaká špecifická operácia.

Čo sa týka tohto, ako vytvoríte neblokujúcu zásuvku?

Na označenie a zásuvka ako nie - blokovanie , používame systémové volanie fcntl. Tu je príklad: int flags = guard(fcntl(socket_fd, F_GETFL), "nepodarilo sa získať príznaky súboru"); guard(fcntl(socket_fd, F_SETFL, príznaky | O_NONBLOCK), "nemohol nastaviť príznaky súboru");

Čo je blokovanie zásuvky?

A zásuvka môže byť v režim blokovania “alebo „neblokovanie režim “. Funkcie zásuvky v blokovanie (alebo synchrónne) režim nevracajte sa, kým nebudú môcť dokončiť svoju akciu. Toto sa volá blokovanie pretože zásuvka ktorého funkcia bola volaná nemôže nič robiť - je zablokovaná - kým sa hovor nevráti.

Odporúča: