Hola
La idea te la resumo a grandes rasgos:
* Abrir un socket-servidor TCP en un determinado puerto que este
estara a la escucha de peticiones entrantes remotas de clientes
* Si vas ha esperar solo una conexion no utilices la funcion select()
pero si la demanda es mayor seria bueno que la utilices,
ademas debes de crear un fork() para cada peticion
* Una vez emtablada la comunicacion envias bytes de datos, el
flujo de bytes puede ir y venir por parte del server y el cliente ,
esto se logra con las funciones read() y write()
No se si te haya servido
te mando este link a mi me sirvio hace años
http://www.arrakis.es/~dmrq/beej/index.html