Voglio leggere i dati che arrivano su una porta TCP specifica a tempo indeterminato
Questo non ha davvero senso ... se stavi cercando tutti i dati che arrivano su una porta UDP, allora va bene - TCP è comunque un protocollo basato sulla connessione. Una volta che un client si connette e tu accept()finisci con due socket: uno in ascolto e uno connesso al client ... ncchiuderai il socket di ascolto originale e gestirai uno contro uno con il client.
Se desideri essere in grado di ascoltare la connessione di più client, prova a utilizzare socat:
socat TCP-LISTEN:12345,fork FD:1 >> ../myfile
Ciò imposterà una presa di ascolto e interromperà un nuovo processo sulla connessione - mantenendo in ascolto la presa di ascolto. Tutti i dati ricevuti verranno scritti su stdout (descrittore di file 1), che viene reindirizzato ../myfileper l'aggiunta.
NOTA : i dati verranno ricevuti da qualsiasi numero di client, in nessun ordine garantito senza inquadramento ... ovvero: sarà un casino di dati confusi se hai più di un client alla volta.
Se vuoi socatgestire il file per te, puoi usare uno CREATEo OPEN(vedi la pagina man ):
socat TCP-LISTEN:12345,fork OPEN:../myfile,append
Se ti accontenti di un approccio " un client alla volta ", inserisci ncun ciclo:
while :; do nc -l 12345; done >> ../myfile
Prova questo con nc:
nc localhost 12345
-ve-p?