Pages: [1]   Go Down
Print
Author Topic: dubbio insrvr.c  (Read 935 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
alex180788
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 422


« on: 26-09-2010, 22:01:48 »

// ciclo che accetta le connessioni
   client_addr_len = sizeof(client_addr);
   while ( 1 ) {
      if ((connect_socket =       // diversa da server_socket!
           accept(server_socket,
                  (struct sockaddr *) & client_addr, // cast
                  &client_addr_len)) == -1) {
         perror("accepting");
         close(server_socket);         
         exit(-1);
      }         

scusate ragazzi, magari sara' troppo tardi per leggere codice ma non riesco a capire come fa ad uscire dal while!!!
Logged

Codice etico e di pratica professionale dello sviluppo software:
..
..
7. Colleghi. Gli sviluppatori software devono essere leali e di supporto nei confronti dei loro colleghi.
...
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 27-09-2010, 00:27:03 »

Così si capisce meglio:

while (1)
{
    if ((connect_socket = accept(server_socket,
                                (struct sockaddr *) & client_addr,
                                &client_addr_len))
== -1)
    {
        perror("accepting");
        close(server_socket);         
        exit(-1);
    }
}


Praticamente si esce dal ciclo while o quando SIGTERM/SIGKILL non viene gestito (nel secondo caso, banalmente), oppure quando la chiamata accept fallisce restituendo l'apposito valore -1
Quote
On success, accept() returns a non-negative integer that is a descriptor for the accepted socket.
On error, -1 is returned, and errno is set appropriately.
nel qual caso si entra nel corpo del costrutto "if" e si esegue come terza istruzione la chiamta a exit  univ.
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
alex180788
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 422


« Reply #2 on: 27-09-2010, 08:48:32 »

se accept fallisce e restituisce -1 ci sono.... ma se va bene e NON restituisce -1 il while non continua a ciclare???... in teoria dovrebbe uscire dal while una volta che ha accettato una richiesta dalla coda delle connect.....
Logged

Codice etico e di pratica professionale dello sviluppo software:
..
..
7. Colleghi. Gli sviluppatori software devono essere leali e di supporto nei confronti dei loro colleghi.
...
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #3 on: 27-09-2010, 14:23:39 »

Ovviamente un esempio di server reale, dopo questo if, inserirebbe del codice per fare qualcosa (ad es. I/O) con connect_socket, ma per la didattica questo esempio è sufficiente per capire il funzionamento generale.

Questo è un programma che non deve terminare mai in modo esplicito (ciclo while infinito), deve rimanere in attesa di connessioni e accettarle pian piano finché non viene terminato da fuori o per un errore.
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pages: [1]   Go Up
Print
Jump to: