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:
file.config è così costituito: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 } }
server1
server2
server3
ed è creato tramite uno script che invoca le seguenti istruzioni:
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!codice:cat > ./file.config <<EOF server1 server2 server3 EOFCosa c'è che non va? Suggerimenti?

Cosa c'è che non va? Suggerimenti?
Rispondi quotando