En la programación de redes, ¿qué es el socket sin bloqueo?

Espero que ya sepas acerca de los enchufes mientras haces esta pregunta. Hay muchos tipos de enchufes. Dos de ellos son bloqueantes y no bloqueantes. Los enchufes de bloqueo son los que se bloquean (no se ejecuta una línea de código después de esto) después de hacer una llamada al sistema hasta que llega una respuesta o se agota el tiempo de espera o se produce algún tipo de error. Por otro lado, el no bloqueo continúa la ejecución después de hacer una llamada al sistema y no espera la respuesta.
Los enchufes de bloqueo son comunes solo por la sencilla razón de que son fáciles de manejar en el programa.


El siguiente texto es de la fuente: Sockets bloqueantes versus no bloqueantes
Digamos que estás escribiendo un navegador web. Intenta conectarse a un servidor web, pero el servidor no responde. Cuando un usuario presiona (o hace clic) en un botón de detención, desea que la API connect () deje de intentar conectarse.
Con lo que has aprendido hasta ahora, eso no se puede hacer. Cuando emite una llamada a connect (), su programa no recupera el control hasta que se realiza la conexión o se produce un error.
La solución a este problema se llama “enchufes sin bloqueo”. Por defecto, los sockets TCP están en modo “bloqueo”. Por ejemplo, cuando llama a recv () para leer desde una secuencia, el control no se devuelve a su programa hasta que se lea al menos un byte de datos del sitio remoto. Este proceso de esperar a que aparezcan los datos se conoce como “bloqueo”. Lo mismo es cierto para la API write (), la API connect (), etc. Cuando las ejecuta, la conexión se “bloquea” hasta que se completa la operación.
Es posible establecer un descriptor para que se coloque en modo “sin bloqueo”. Cuando se coloca en modo sin bloqueo, nunca espera a que se complete una operación. Esta es una herramienta invaluable si necesita cambiar entre muchos zócalos conectados diferentes y desea asegurarse de que ninguno de ellos haga que el programa se “bloquee”.