El tema era que había leído que hay kernel que soportan la cola en el select y otros que no.
Bueno al final me hice el siguiente código para probar:
#include<stdio.h>
#include<stdlib.h>
#include<linux/ipc.h>
#include<linux/msg.h>
struct mymsbuf{
long mtype;
int numero_trabajo;
double salario;
}msg;
key_t GENERAR_CLAVE()
{
key_t msgkey;
msgkey=ftok(".",'a');
return(msgkey);
}
int ABRIR_COLA(key_t msgkey)
{
int qid;
if(qid=msgget(msgkey,IPC_CREAT|0666)<0){
perror("msgget");
exit(EXIT_FAILURE);
}
return(qid);
}
void REC_MENSAJE(int qid,struct mymsbuf *qbuf)
{
int longitud;
longitud=sizeof(struct mymsbuf)-sizeof(long);
if(msgrcv(qid,qbuf,longitud,0)<0){
perror("msgsend");
exit(EXIT_FAILURE);
}
return;
}
main()
{
int qid;
key_t msgkey;
fd_set set;
msgkey=GENERAR_CLAVE();
qid=ABRIR_COLA(msgkey);
/*preparo msj*/
FD_ZERO(&set);
FD_SET(qid,&set);
select(qid+1,&set,NULL,NULL,NULL);
REC_MENSAJE(qid,&msg);
}
y empecé a cargar mensajes en la cola, creada con una modificación del mismo programa. Me fijé si los mensajes se cargaron mediante:
alexis@Lubu:~/Documentos/Prog_mios$ ipcs -q
------ Colas de mensajes -----
key msqid propietario perms bytes utilizados mensajes
0x6106e841 0 alexis 666 36 3
alexis@Lubu:~/Documentos/Prog_mios$
El asunto es que la consola en la que corría el proceso con el select no se desbloqueaba, por lo tanto concluyo que el int que devuelve msgget no es un file descripto, por lo menos en mi versión de Kernel.
Voy a tener que idear otra forma de programar mi servidor concurrente.