En Linux, los sockets son tratados como cualquier otro descriptor de fichero, asi que el select seria igual, ahi va codigo de como progrmar el select para elegir entre dos sockets TCP.
struct sockaddr_in serv, serv1; /* pa el socket */
struct fd_set read_mask; /* pa el select */
serv.sin_port=puerto;
serv.sin_family=AF_INET;
serv.sin_addr.s_addr=INADDR_ANY;
/* igual pa serv1 */
decr_TCP1=crea_sock(serv,1);
decr_TCP2=crea_sock(serv1,1);
FD_ZERO(&read_mask);
FD_SET(decr_TCP1, &read_mask);
FD_SET(decr_TCP2, &read_mask);
select(descr_TCP2+1, &read_mask, NULL, NULL, NULL)
if(FD_ISSET(decr_TCP1, &read_mask))
{
/* Codigo pa ese socket */
}
if(FD_ISSET(decr_TCP2, &read_mask))
{
/* codigo pa este otro */
}
/* Por cierto lo descriptores luego hay que cerrarlos */
Espero que esto te sea de ayuda y te sirva