C/Visual C - ¿Usar socket bloqueante?

   
Vista:

¿Usar socket bloqueante?

Publicado por Cris_Y (6 intervenciones) el 20/01/2010 13:02:06
Hola buenas,

estoy haciendo un programa con sockets en C sobre Linux. Se trata de un servidor TCP que manda paquetes a un cliente TCP. El número de paquetes es determinado, lo conozco; pero me parece feo hacer un ciclo for en el servidor y que deje de enviarlos; lo que quería hacer es que una vez el cliente haya recibido los paquetes necesarios, diga "ya no me mandes más". El problema es que si pongo un RECV en el servidor, se me quedaría bloqueado y sólo mandaría un paquete. He estado buscando información sobre sockets no bloqueantes pero he leído que consumen mucha CPU. ¿Merecerá la pena que lo haga así? ¿alguien tiene otra opción?.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Usar socket bloqueante?

Publicado por Tom (481 intervenciones) el 21/01/2010 10:13:18
La mejor opción es que mandes el número de paquetes necesario. Y no más.

Pero puedes usar select(), para ver la disponibilidad de datos en sockets de lectura y de escritura. Cuando el servidor encuentre datos de lectura (provenientes del cliente) los lee y, si es el caso, deja de enviar datos por el socket de escritura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Usar socket bloqueante?

Publicado por Cris_Y (6 intervenciones) el 22/01/2010 00:46:10
Hum... acabo de leer tu respuesta, y ahora es un poco tarde. Voy a buscar información sobre esa función el lunes, que por lo que dices creo que me va a venir de perlas :)

Lo de evitar enviar el número de paquetes en principio "necesario" es debido a que ese número me asegura una cierta probabilidad de reconstruir el fichero, pero puede que con menospaquetes valga, por eso quería evitarlo si podía.

Muchas, muchas gracias, Tom.

Un saludo,

Cristina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar