Ayuda con sockets en C

A ver si me podéis echar una mano, quiero hacer un cliente que le haga una serie de peticiones al servidor y este las conteste y a la vez el cliente este mandando datos al servidor (un fichero por ejemplo). ¿Puedo hacer esto con un sólo socket? en principio tengo pensado llevar cada labor con un thread distinto y tengo mis dudas. ¿O tendría que crear un socket para cada caso?, ¿se podrían enviar los distintos datos por el mismo socket?

No sé si me explico bien, por poner un ejemplo: me pongo a subir un fichero al servidor en un thread (sería algo así como en segundo plano) y el cliente a la vez haría una serie de consultas al servidor y que este me envíe las respuestas (esto iría en otro thread). Lo que yo pregunto es si puedo multiplexar por el mismo socket esto y también, mientras siga subiendo el fichero que pueda leer las respuestas del servidor. El servidor en principio usaría un único thread. Yo creo que debería usar dos sockets y comprobar con select() en el servidor si tengo datos en uno y otro y actuar en consecuencia.
Puedes hacerlo perfectamente con un socket, solo tendrias que crearle una especie de cabecera a tu data para que el servidor distinga si es una petición, un bloque de datos o un mensaje de control acerca de la data, claro que tambien se pueden usar dos sockets y solo usar el socket de data bajo demanda cuando se lo pidas al servidor a traves de una petición. Todo depende de como quieres que funcione tu protocolo. Saludos.
Finalmente me voy a inclinar por usar dos sockets, ya que analizando mejor el tema estoy casi seguro que tal y como quiero hacer las cosas el uso de un sólo socket va a acabar siendo costoso computacionalmente.

Muchas gracias por contestar!
2 respuestas