Idle tcp descrittore di file dopo il fallito collegare in HPUX
Domanda
Ho un client socket tcp (in c ++) che ha un loop dove tentativi di aprire un socket e connettersi a un server a un dato intervallo finché esso riesce.
Un bug nel programma ha causato close
non di essere chiamato sul descrittore di file dopo una connessione fallito, e lo stesso (aperto) descrittore è stato utilizzato di nuovo quando si chiama socket
e connect
nella prossima iterazione del ciclo, quando riprovare a riconnettersi.
Su macchine Linux questo non ha causato alcun problema, mentre su HPUX esso eventualmente causare un errore di 24 - 'Troppi file aperti'' -. Lsof ha mostrato questi come TCP *:* (IDLE)
Qual è la differenza qui tra Linux e HP-UX?
Soluzione
Credo che proviene dall'origine in cui HPUX aggiunto prese al kernel. Se non ricordo male (dalla fine del 1980) hanno aggiunto Berkeley Sockets come un oggetto condivisibile libreria-essenzialmente un livello o due sulla parte superiore del file di I / system o.
Che UX si comporta ancora in questo modo indica che la chiamata socket () non è il riutilizzo di descrittori di file inutilizzati, probabilmente perché non è a conoscenza di loro, e nessun ingegnere di manutenzione è stato incaricato di aggiungere che. In Linux, socket () è tanto quanto una parte del kernel, come gli altri componenti principali, così naturalmente è a conoscenza di quale file descrittori sono disponibili per il riutilizzo.
Altri suggerimenti
Sembra che il limite di file di un processo può aprire contemporaneamente è 60 di default su HPUX , mentre su Linux è 1024 .