PDA

View Full Version : [C] Socket in ascolto senza kill


LupettoOne
29-12-2009, 17:31
Ciao ragazzi! Devo completare un progetto! Ho creato un lato server dove gli utenti si connettono e scambiano messaggi fino a qui tutto ok e funge... ma appena il client esce dalla connessione il server si auto-killa mentre io vorrei che resta sempre in ascolto in attesa di nuove connessioni! Il progetto è su windows le winsock quale funzione dovrei utilizzare per farlo rimanere in ascolto? Grazie in anticipo a tutti!

wingman87
29-12-2009, 17:49
Penso che basti rimettere il server in ascolto

LupettoOne
29-12-2009, 18:16
wingman87 grazie per avermi risposto! Comunque si... la logica sarebbe quella ma siccome le socket non le mastico benissimo perchè le sto tutt'ora studiando vorrei sapere la funzione in modo che la studio! Ho fatto delle ricerche potrebbe essere la funzione "while"?
Esempio: il mio server finisce in questo modo

closesocket(sendrecv);

closesocket(sock);

WSACleanup();

return 0;

}

}

wingman87
29-12-2009, 18:42
while è un costrutto del linguaggio che probabilmente ti tornerà utile. Per rimettere in ascolto il server basta fare nuovamente una accept sul socket in ascolto. Tu probabilmente hai un socket s su cui hai richiamato listen, poi avrai fatto una accept su quel socket ottenendo un socket per comunicare con il client. Quello che devi fare ora è chiudere il socket con cui comunicavi con il client e richiamare nuovamente accept sul socket s.

cionci
29-12-2009, 18:44
Non devi chiudere il socket dopo la accept, quel socket deve servire anche successivamente per una nuova accept. La accept torna un socket e quel socket deve essere usato per gestire il client connesso, appena il client connesso finisce il suo lavoro devi tornare sulla accept.

LupettoOne
29-12-2009, 19:02
Quindi ragazzi questa parte qui è quella interessata:

listen(sock,1);

int lun = sizeof (struct sockaddr);

sendrecv = accept(sock,(struct sockaddr*)&sendrecv_addr,&lun);

Giusto?

Rikiji
29-12-2009, 22:16
Posta tutto il codice.

Se ho intuito quello che vuoi fare, devi inserire la accept dentro un while(1).

cionci
29-12-2009, 23:18
Se ho intuito quello che vuoi fare, devi inserire la accept dentro un while(1).
Esattamente.
Quel "sendrecv" è un socket. Su quel socket puoi fare send e recv, ma una volta che hai disconnesso il client devi ritornare sulla accept per ottenere un nuovo socket "sendrecv" per il seguente client.