Tengo un programa que consta de un servidor maestro y servidores esclavos distribuidos. Los servidores esclavos envían actualizaciones de estado al servidor, y si el servidor no ha tenido noticias de un esclavo específico en un período fijo, marca al esclavo como inactivo. Esto está sucediendo consistentemente.No se puede asignar la dirección solicitada: ¿causas posibles?
Al inspeccionar los registros, he encontrado que el esclavo solo puede enviar una actualización de estado al servidor, y nunca puede enviar otra actualización, siempre fallando en la llamada de connect() "No se puede asignar la dirección solicitada (99).
Por extraño que parezca, el esclavo puede enviar varias otras actualizaciones al servidor, y todas las conexiones están sucediendo en el mismo puerto. Parece que la causa más común de esta falla es que las conexiones son dejado abierto, pero estoy teniendo problemas para encontrar algo que quede abierto. ¿Hay otras posibles explicaciones?
Para aclarar, así es como me estoy conectando:
struct sockaddr *sa; // parameter
size_t sa_size; //parameter
int i = 1;
int stream;
stream = socket(AF_INET,SOCK_STREAM,0);
setsockopt(stream,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));
bindresvport(stream,NULL);
connect(stream,sa,sa_size);
Este código está en una función para obtener una conexión a otro servidor, y una falla en cualquiera de esas 4 llamadas hace que la función falle.
He verificado que el puerto y la dirección IP son correctos. – dbeer