Programmer des applications

Cette section aborde le code nécessaire à l'écriture d'une application utilisant keepalive. Ce n'est pas un manuel de programmation, et il requiert d'avoir une connaissance du langage C et des concepts réseau. Je considère que la notion de socket vous est familière, de même que tous les aspects généraux de votre application.

Les applications réseau ne requièrent pas toutes l'aide du keepalive. Souvenez vous qu'il s'agit de TCP keepalive. Comme vous pouvez le deviner, seules les sockets TCP peuvent en tirer parti.

La plus belle chose que vous puissiez faire en écrivant une application est de la rendre aussi paramétrable que possible, et de ne pas en forcer les choix. Si vous voulez prendre en compte le bonheur de vos utilisateurs, vous devriez implémenter keepalive et laisser les utilisateurs décider s'ils veulent ou non l'utiliser en prévoyant un paramètre de configuration ou une option de ligne de commande.

Tout ce dont vous avez besoin pour que keepalive soit activé sur une socket particulière est de positionner l'option sur cette socket. Le prototype de fonction est le suivant:

  int setsockopt(int s, int level, int optname,
                 const void *optval, socklen_t optlen)
      

Le premier paramètre est la socket, préalablement créée avec socket(2); le second doit être SOL_SOCKET, et le troisième SO_KEEPALIVE . Le quatrième doit être un entier booleéen, indiquant que l'option est active, alors que le dernier est la taille de la valeur passée précédemment.

Conformément au manuel, le code retour 0 indique le succès, -1 est la valeur d'erreur (et errno est correctement renseignée).

Il existe aussi trois autres options de socket qu'il est possible de renseigner en écrivant votre application. Toutes utilisent le niveau SOL_TCP au lieu de SOL_SOCKET, et elles prennent le pas sur les variables système pour la socket courante. Si vous lisez avant d'écrire, les paramètres système seront retournés.

  • TCP_KEEPCNT : prend le pas sur tcp_keepalive_probes

  • TCP_KEEPIDLE : prend le pas sur tcp_keepalive_time

  • TCP_KEEPINTVL : prend le pas sur tcp_keepalive_intvl

Voici un petit exemple qui crée une socket, montre que keepalive est désactivé, puis l'active et vérifie que l'option est réellement positionnée.