Facciamo uso di un array di strutture chiamato ClientSock[], in cui ogni elemento è relativo ad un client collegato e garantisce di individuarlo in modo univoco. In tal modo per noi un client viene identificato completamente tramite l'indice del vettore.
typedef struct
{
char ip_addr[IP_ADDR]; /* ip address xxx.yyy.zzz.www */
char name[NAME]; /* nome di login (8 caratteri) */
char tty[TTY]; /* nome della tty senza tty (es. 3) */
char nick[NICK]; /* nickname da 15 caratteri */
int mode; /* se si e' il moderatore */
int nclient; /* il num progressivo del client */
int nsocket; /* n. socket assegnato */
}
User;
Tra i campi della struttura sopra elencata sono da notare: nclient e nsocket. Il primo viene usato nell'algoritmo di elezione di un nuovo moderatore se tutti gli altri moderatori si sono scollegati: in questo caso viene eletto il client con il numero minore (cioè si è collegato prima). Il secondo serve per identificare il canale di comunicazione che usa il server per colloquiare con quel particolare client.