• [^] # Re: Je comprends pas

    Posté par . En réponse au journal Le TCP keepalive m'a tué. Évalué à 6.

    Et t'es obligé d'être si agressif ? OK, c'est géré par la stack, méa culpa, mais c'est demandé par l'appli.

    Je suis agressif ? Je suis juste factuel.

    OK. Et donc, que me préconises-tu ? De relancer mon « contexte » à chaque fois que je me connecte ? Vive l'automatisation des tâches… Ou alors que j'utilise screen/tmux ? Ah mais alors, niveau ressources, c'est encore pire…

    Je ne comprends pas que des mecs s'inquiètent des ressources en socket que pourraient bouffer un utilisateur à qui ils ont donné un shell sur une bécane. Je peux te bouffer des ressources de 50000 autres manières ! Pourquoi limiter artificiellement celle-là et pas les autres, alors qu'elle est si pratique ?!!

    C'est une protection contre les leaks involontaires. Quand tu es en utilisation interactive tu veux que quand y'a un problème, ca garbage automatiquement, pas devoir revenir tuer tes shells, et les admins ne veulent pas non plus avoir à gérer ca. Quand tu es en utilisation batch, les utilisateurs savent qu'ils ont leurs processus en background a gérer puisqu'ils l'ont choisi. Dans ton les cas ton shell se termine.

    Faut vraiment vivre à bisounours land pour penser que les utilisateurs reviennent tuer les processus quand une session interactive foire et qu'ils ont envi de s'amuser à retrouver les processus.

    Moi, je n'ai pas de retour visuel quand une connexion déconne. Ça me fait chier.

    Bien sur que si ton client SSH se termine avec un 255 comme exit value que se soit avec le TCP keepalive (bon la on est sur un temps de ~2h) ou le server alive.

    Dans clientloop.c

    Pour le server alive

    static void
    server_alive_check(void)
    {
     if (packet_inc_alive_timeouts() > options.server_alive_count_max) {
     logit("Timeout, server %s not responding.", host);
     cleanup_exit(255);
     }
     packet_start(SSH2_MSG_GLOBAL_REQUEST);
     packet_put_cstring("keepalive@openssh.com");
     packet_put_char(1); /* boolean: want reply */
     packet_send();
     /* Insert an empty placeholder to maintain ordering */
     client_register_global_confirm(NULL, NULL);
    }
    
    

    Pour le TCP keepalive

    static void
    client_process_net_input(fd_set *readset)
    {
     int len, cont = 0;
     char buf[8192];
     /*
     * Read input from the server, and add any such data to the buffer of
     * the packet subsystem.
     */
     if (FD_ISSET(connection_in, readset)) {
     [...]
     if (len < 0) {
     /*
     * An error has encountered. Perhaps there is a
     * network problem.
     */
     snprintf(buf, sizeof buf,
     "Read from remote host %.300s: %.100s\r\n",
     host, strerror(errno));
     buffer_append(&stderr_buffer, buf, strlen(buf));
     quit_pending = 1;
     return;
     }
     packet_process_incoming(buf, len);
     }
    int
    client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
    {
     while (!quit_pending) {
     [...]
     client_process_net_input(readset);
     if (quit_pending)
     break;
     [...]
     }
    }
    
    

    C'est tout l'intérêt du truc.

    C'est facile de dire ça quand c'est une option par défaut. « Ferme-là, tu n'as rien à critiquer, le monde a décidé pour toi »

    Oui c'est facile à dire quand le choix est pertinent et qu'en plus on peut le modifier.