Tuesday, October 19, 2004

Problema con select

Estoy teniendo un problema al utilizar el select. Al parecer detecta correctamente cuando alguno de los sockets se encuentra listo para recibir datos. Sin embargo, de los 832000 bytes que intento mandar, solamente lee los primeros 1447 bytes (así es, el tamaño del MTU). Esto quiere decir que solamente alcanza a leer el primer datagrama. Hice muchas pruebas y el problema persistió, así que opté por utilizar fork() para crear nuevos procesos que atiendan al cliente. Al parecer de esta forma consigo que varios clientes puedan estar enviando datos al servidor al mismo tiempo. Supuestamente el único lapso en el que no se atendería a un cliente es en lo que se hace la llamada a fork(), por lo que quizá sea útil para mi propósito.

Algo que me llamó la atención sobre el uso de select es lo siquiente:

Stevens(from memory) "when faced with the choice of using non-blocking i/o or threads/processes, the smarter decision is threads/procesesses." reasons:
*non blocking i/o is difficult to implement and error prone.
*the behavior of select with non blocking descriptors is platform specific. so you need added code to handle these differences
*threads/forks()'s are only a fraction of the time slower, and much easier to implement


Esto lo tomé de un foro (http://forums.devshed.com/t93193/s.html) en donde recomienda el siguiente libro:

Unix network programming volume 1 by w richard stevens


En fin, hasta el momento parece ser que he conseguido mi propósito, ahora faltará observar algunas cuestiones de rendimiento.

ILA

No comments: