Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    115

    [c] CHAT: Uscita improvvisa di un client

    Salve a tutti, ho realizzato una CHAT multiutente utilizzando S.0. Linux, thread e socket.

    Ho un problema da cui non riesco a venirne a capo:

    qualora un utente si disconnetta in maniera impropria, tipicamente premento CTRL-c per terminare l'applicazione,
    come fa il singolo thread del server a lui associato a determinare che è uscito???
    Ho provato a verificare ad esempio se il risultato della read(la funzione che legge i dati del client dal socket) produce
    risultati negativi, ma non è questa la soluzione.
    Io avevo pensato di incaricare il client di intercettare il segnale SIGINT (pressione dei tasti CTRL-C) e in tal caso di inviare quest'informazione al server
    che la potesse quindi manipolare, ma la funzione signal non permette di fare questo, o meglio, non so come passare altri parametri, oltre a lnumero di segnale,
    a questa funzione.

    Mi aiutate per piacere fornendomi anche soluzioni alternative???

    Vi ringrazio.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Premetto che non ho mai lavorato con le Socket in C, tantomeno sotto Linux...
    Comunque, ho dato un'occhiata al codice di un Server scritto in C per Linux: ho notato che chi l'ha scritto utilizza la funzione recv sul server per ricevere i dati da parte del client. Tale funzione ritorna un intero: il numero di byte letti dalla socket.
    Chi ha scritto quel socket ha fatto qualcosa del genere:
    codice:
    int num;
    
    /* inizializzazioni del buffer */
    ...
    
    num = recv(...);
    
    if (num < 0) {
       ...  /* Impossibile ricevere dati: ritorna un codice d'errore */
    } else if (n == 0) {
       ...  /* Il client si è disconnesso! Chiude la Socket*/
    }
    Forse ti può essere utile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    115
    ok, grazie per il tuo interessamento.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.