Què són els endolls que no bloquegen?
Què són els endolls que no bloquegen?

Vídeo: Què són els endolls que no bloquegen?

Vídeo: Què són els endolls que no bloquegen?
Vídeo: $7 Vietnam Capsule Hotel 🇻🇳 2024, Maig
Anonim

no - endolls de bloqueig . La solució a aquest problema s'anomena " no - endolls de bloqueig ". Per defecte, TCP endolls estan a " bloqueig Per exemple, quan crideu a recv() per llegir des d'un flux, el control no es retorna al vostre programa fins que es llegeix almenys un byte de dades des del lloc remot.

En conseqüència, què és un sòcol de bloqueig i no bloqueig?

En bloqueig mode, el recv, enviar, connectar (només TCP) i acceptar (només TCP) endoll Les trucades a l'API ho faran bloc indefinidament fins que s'hagi realitzat l'acció sol·licitada. En no - bloqueig mode, aquestes funcions tornen immediatament. seleccionar la voluntat bloc fins el endoll està a punt.

També es pot preguntar, els sockets estan bloquejats per defecte? Per per defecte , TCP endolls es col·loquen en a bloqueig mode. Això vol dir que el control no es retorna al vostre programa fins que s'hagi completat alguna operació específica.

Respecte a això, com es fa un sòcol sense bloqueig?

Per marcar a endoll com no - bloqueig , fem servir la crida al sistema fcntl. Aquí teniu un exemple: int flags = guard(fcntl(socket_fd, F_GETFL), "no s'han pogut obtenir els indicadors de fitxer"); guard(fcntl(socket_fd, F_SETFL, flags | O_NONBLOCK), "no s'ha pogut conjunt senyaladors de fitxer");

Què és el bloqueig de socket?

A endoll pot estar a " mode de bloqueig " o "sense bloqueig mode ." Les funcions de endolls en bloqueig (o sincrònic) mode no tornen fins que no puguin completar la seva acció. Això es diu bloqueig perquè el endoll la funció de la qual s'ha cridat no pot fer res, està bloquejada, fins que la crida no torni.

Recomanat: