Sockets no bloqueantes

Darío López Llueca dlopez en aditel.org
Vie Jul 8 11:43:49 CEST 2005


David Villa wrote:

>Hola:
>
>En realidad un socket bloqueante/no-bloqueante no es un nuevo tipo de
>socket, es más bien un modo. 
>
>Cuando usas un socket bloqueante, al hacer una llamada a recv() el
>proceso queda bloqueado hasta que llegan datos. Es algo parecido a leer
>del teclado (que también puede ser bloqueante o no).
>
>Eso está muy bien cuando sólo manejas un dispositivo asíncrono (y un
>socket lo es). El problema se puede resolver de varias maneras, por
>ejemplo con hilos o con el select(). 
>
>select() permite manejar en un solo punto varios descriptores
>asíncronos, de modo que cuando lees o escribes en un dispositivo (lo que
>incluye a los sockets) ya sabes de antemano que hay algo para leer o
>escribir (según sea) de modo que evitas que te bloquee el proceso.
>
>Llegados a este punto y dicho lo dicho, no entiendo porqué Darío
>necesita sockets no-bloqueantes. Si usas select() no hay mucha
>diferencia entre usar bloqueantes o no. Y puestos a elegir, son
>preferibles los bloqueantes.
>
>Saludos
>
>  
>

Uso los no bloqueantes porque a parte de las conexiones, voy a hacer uso
de una interfaz gráfica, y si hiciera uso de los sockets bloqueantes,
cuando pidiese o enviase cosas por el socket, la interfaz se quedaría
bloqueada (y la verdad, a mí no me gusta eso :)). También existe la
posibilida de los hilos, pero entonces entraríamos en el tema de los
semáforos y complicaría sobre manera mi programa.

Espero que ahora ya entendáis un poco mis razones :P

>El jue, 07-07-2005 a las 12:14 -0300, jmoroz en uol.com.ar escribió:
>  
>
>>[Puede parecer OFF-TOPIC pero el tema ya esta instalado]
>>
>>Pero entonces cuantos tipo de sockets hay, yo conozco los
>>inet y los de unix(filesystem).
>>Mejor dicho, se ve que de los inet hay varios tipos!?
>>Podrias hacer una vreve reseña de lo que implica ser
>>bloqueante y no bloqueante.
>>Recuerdo haber jugado con sockets en VB pero no infirio
>>en el aplicativo si eran o no bloqueantes.
>>
>>desde ya garcias
>>Mario.
>>
>>
>>Darío López Llueca escribió:
>>    
>>
>>>Gracias Joaquín José pero ese problema ya lo tenía resuelto, simplemente
>>>usando sockets no bloqueantes :) (ya que ese es el principal beneficio
>>>de estos sobre los bloqueantes).
>>>
>>>Aps... y gracias a Francesc también, por sus orientaciones :)
>>>
>>>Joaquin Jose del Cerro Murciano wrote:
>>>
>>>
>>>      
>>>
>>>>Hola otra vez, 
>>>>En el ejemplo que te deje ayer mejor una correccion, no esperar a que el 
>>>>socket este listo para escribir si lo que quieres es leer. Osea
>>>>
>>>>
>>>>
>>>>
>>>>        
>>>>
>>>>>print "Esperando a recibir respuesta"
>>>>>read = []
>>>>>while s not in read:
>>>>>read, write, error = select.select ([s],[s],[s],1)
>>>>>  
>>>>>
>>>>>          
>>>>>
>>>>    read, write, error = select.select ([s],[],[s],1)
>>>>
>>>>
>>>>
>>>>        
>>>>
>>>>>print read, write, error
>>>>>
>>>>>print 'Se ha recibido algo!'
>>>>>  
>>>>>
>>>>>          
>>>>>
>>>>Un saludo
>>>>Joaquin.
>>>>
>>>>		
>>>>______________________________________________ 
>>>>Renovamos el Correo Yahoo! 
>>>>Nuevos servicios, más seguridad 
>>>>http://correo.yahoo.es
>>>>_______________________________________________
>>>>Python-es mailing list
>>>>Python-es en aditel.org
>>>>http://listas.aditel.org/listinfo/python-es
>>>>
>>>>
>>>>        
>>>>
>>>_______________________________________________
>>>Python-es mailing list
>>>Python-es en aditel.org
>>>http://listas.aditel.org/listinfo/python-es
>>>
>>>
>>>      
>>>
>>_______________________________________________
>>Python-es mailing list
>>Python-es en aditel.org
>>http://listas.aditel.org/listinfo/python-es
>>
>>    
>>
>
>_______________________________________________
>Python-es mailing list
>Python-es en aditel.org
>http://listas.aditel.org/listinfo/python-es
>  
>




Más información sobre la lista de distribución Python-es