Ce sunt prizele care nu se blochează?
Ce sunt prizele care nu se blochează?

Video: Ce sunt prizele care nu se blochează?

Video: Ce sunt prizele care nu se blochează?
Video: Cum sa NU opresti PS4... #shorts 2024, Mai
Anonim

non - prize de blocare . Soluția la această problemă se numește „ non - prize de blocare „. În mod implicit, TCP prize sunt în " blocare ". De exemplu, când apelați recv() pentru a citi dintr-un flux, controlul nu este returnat programului dvs. până când cel puțin un octet de date este citit de pe site-ul la distanță.

În consecință, ce este soclul blocant și neblocant?

În blocare modul, recv, send, connect (numai TCP) și accepta (numai TCP) priză Apelurile API vor bloc pe termen nelimitat până la îndeplinirea acţiunii solicitate. În non - blocare modul, aceste funcții revin imediat. selectați voința bloc pană la priză este gata.

Se poate întreba, de asemenea, socket-urile se blochează în mod implicit? De Mod implicit , TCP prize sunt plasate într-o blocare modul. Aceasta înseamnă că controlul nu este returnat programului dumneavoastră până când nu este finalizată o anumită operațiune.

În legătură cu asta, cum faci o priză care nu blochează?

Pentru a marca a priză la fel de non - blocare , folosim apelul de sistem fcntl. Iată un exemplu: int flags = guard(fcntl(socket_fd, F_GETFL), "could not get file flags"); guard(fcntl(socket_fd, F_SETFL, steaguri | O_NONBLOCK), "nu a putut a stabilit steagurile fișierelor");

Ce este blocarea prizei?

A priză poate fi în " modul de blocare " sau "neblocare modul ." Funcțiile de prize în blocare (sau sincron) modul nu se întorc până când își pot finaliza acțiunea. Aceasta se numește blocare pentru că priză a cărui funcție a fost apelată nu poate face nimic - este blocată - până când apelul revine.

Recomandat: