ServLib.h

Serveur hautes performances TCP Windows/Linux (Langage C)

Version 2.28

Fonctions invoquables

void cbx_Serveur_Start (short PORT, unsigned char MAX_USERS);
void cbx_Serveur_Stop ();
unsigned short cbx_getNBUSERS ();
int cbx_getNBCONNS ();
void cbx_Envoyer (SOCKET i, char *msg, short len);
void cbx_Envoyer_a_tous (char *msg, short len);
void cbx_Envoyer_a_tous_sauf (SOCKET i, char *msg, short len);
void cbx_log (char *msg);
void cbx_kick (SOCKET i);
void cbx_kick_all ();

Callbacks récupérables

void onAccept (int idRequest, SOCKET i);
void onData_Arrival (SOCKET i, char *buf, short nbytes);
void onClient_Left (SOCKET i);
void onError (SOCKET i, char *errmsg);



Fonctions invoquables


cbx_Serveur_Start ()

void cbx_Serveur_Start(short PORT, unsigned char MAX_USERS);
Lance un serveur sur le PORT spécifié pour MAX_USERS clients connectés simultanément au maximum.
Cette fonction crée le socket d'écoute, puis invoque les fonctions bind() et listen().
Le serveur peut alors être stoppé en invoquant cbx_Serveur_Stop().

cbx_Serveur_Stop ()

void cbx_Serveur_Stop();
Ferme le serveur et repasse la main au programme.

cbx_getNBUSERS ()

unsigned short cbx_getNBUSERS();
Retourne le nombre de clients actuellement connectés.

cbx_getNBCONNS ()

int cbx_getNBCONNS();
Retourne la valeur du compteur qui contient le nombre de demandes de connections depuis le lancement du serveur.

cbx_Envoyer ()

void cbx_Envoyer (SOCKET i, char *msg, short len);
Envoie le msg au socket i qui fait len octets de longeur.
Cette fonction fait un send() et en cas d' erreur, l' affiche le message d'erreur sur stderr. Bien sûr le programme appelant peut quand même invoquer la fonction send() au lieu de cbx_Envoyer(), mais dans ce cas la gestion des erreurs doit se faire au sein du programme appelant. La fonction cbx_Envoyer rend le code plus court, plus lisible, et gère les erreurs.

cbx_Envoyer_a_tous ()

void cbx_Envoyer_a_tous (char *msg, short len);
Envoie le msg à tous les clients connectés.
La fonction envoie len octets du message, qui n'est pas forcément terminé par zéro.

cbx_Envoyer_a_tous_sauf ()

void cbx_Envoyer_a_tous_sauf (SOCKET i, char *msg, short len);
Envoie le msg à tous les clients connectés, sauf au socket i.
La fonction envoie len octets du message, qui n'est pas forcément terminé par zéro.

cbx_log ()

void cbx_log (char *msg);
Envoie sur la sortie standard le msg. Elle peut contenir des codes VT100 pour formater le texte par exemple en couleur ou en gras.

cbx_kick ()

void cbx_kick (SOCKET i);
Ferme la connection du socket i et le retire de la liste des sockets à oberver au sein du moteur servLib.

cbx_kick_all ()

void cbx_kick_all ();
Ferme toutes les connections ouvertes, mais le serveur continue de tourner.



Callbacks récupérables


onAccept ()

void onAccept (int idRequest, SOCKET i);
Lorsqu'un client distant tente de se connecter au serveur en invoquant la fonction connect(), Le moteur servLib lui attribue un identifiant de requête idRequest, puis vérifie si MAX_USERS est atteint. Si c'est le cas, le serveur
Sinon, le serveur accepte le client avec accept(). Si accept() échoue, l'erreur est envoyée sur stderr. Sinon le serveur vous repasse alors la main pour notifier la présence d'un nouveau client dans la fonction évènement onAccept() en vous passant son identifiant de requête idRequest et son descripteur SOCKET i.
Cette fonction indique donc que le client est accepté, mais qu'il n'a pas encore envoyé son premier paquet de données (qui est par exemple, une requête HTTP pour un serveur HTTP).

onData_Arrival ()

void Data_Arrival (SOCKET i, char *buf, short nbytes);
Le code de ce callback est exécuté lorsque des données sont disponibles en lecture sur le socket i.
Ces données consistent en une chaîne de caractères buf terminée par zéro qui fait nbytes octets (sans le zéro terminal).
C'est dans cette fonction que le traitement d'un paquet entrant peut se faire, en fonction du protocole implémenté.

onClient_Left ()

void onClient_Left (SOCKET i);
Le code de cette fonction est exécuté lorsqu'un client distant a fermé sa connection. Le moteur servLib vous notifie de la fermeture du client i que vous devriez confirmer en invoquant la macro closesocket().

onError ()

void (SOCKET i, char *errmsg);
Survient en cas d' erreur inopinée, le cas le plus probable étant lors du connection_request, si NBUSERS > MAX_USERS. Le moteur servLib transmet alors le message d' erreur et le descripteur concerné au programme par ce callback.