Ciao a tutti, ho un problema piuttosto incomprensibile con il mio server-client. Non riesco a connetterli, ricevendo come errno dalla connect "ENOENT". Tuttavia esiste sia la socket sulla quale voglio connettermi, sia il path che utilizzo per accedervi!
Vi descrivo un po meglio il problema:
- Il cliente legge da file un path parziale;
- Concatena al path letto l'estensione .sck, aggiunge "in testa" la directory dove si trova il file ed esegue connect.
Client:
codice:
struct sockaddr_un sad;
int sock, trial = 3;
char biblioteca[150], sockpath[160];
fconfig = fopen("./file.config", "r");
while( !feof(fconfig) ){
if( !fgets(biblioteca, partial_path, fconfig) )
continue;
biblioteca[strlen(biblioteca)-1] = '\0'; //sostituisco il \n copiato dalla fgets
sprintf(sockpath, "./tmp/%s.sck", biblioteca); //Si occuperò sprintf di sistemare il teminatore
sad.sun_family = AF_UNIX;
strncpy(sad.sun_path, sockpath, strlen(sockpath));
sock = socket(AF_UNIX, SOCK_STREAM, 0);
if(sock < 0) return -1;
while(trial != 0){
res = connect(sock, (struct sockaddr *) &sad, sizeof(sad));
if (res == 0) return sock;
trial--;
sleep(k); //k vale 1
}
}
file.config è così costituito:
server1
server2
server3
ed è creato tramite uno script che invoca le seguenti istruzioni:
codice:
cat > ./file.config <<EOF
server1
server2
server3
EOF
La stranezza è che l'unico server al quale non riesco a connettermi è il server3, indipendentemente dalla posizione che occupa nel file.config! Anche se avviato singolarmente, non riesco a connettermi, ricevendo sempre lo stesso valore di errno dalla connect! Come è possibile che 3 stringhe, trattate allo stesso identico modo, producano risultati totalmente differenti? Il codice del server è corretto, crea la socket (la posso vedere nella cartella ./tmp), ma nessuno ci si può connettere! Cosa c'è che non va? Suggerimenti?