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?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top