Sono consapevole degli svantaggi del design "wait-> stop", che di solito viene proposto con netcat:
server$ cat test.dat | nc -q 10 -l -p 7878
client$ nc -w 10 remotehost 7878 > out.dat
(Non è affidabile: nessun indicatore per quanto tempo è sempre possibile che ci sia stato un collo di bottiglia della rete per un secondo in più. - Un'altra cosa -> perché attendere 10 secondi se si può sapere immediatamente che i dati vengono trasferiti e iniziare a elaborarli!)
Vorrei una soluzione, con chiusura del flusso tcp affidabile e piacevole .
Ho trovato socat, con chiusura come descritto in man socat
:
Quando uno dei flussi raggiunge effettivamente l'EOF, inizia la fase di chiusura. Socat trasferisce la condizione EOF sull'altro flusso, ovvero cerca di chiudere solo il suo flusso di scrittura, dandogli la possibilità di terminare con grazia.
Ho trovato i seguenti comandi funzionanti:
File di invio server:
server$ socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr
client$ socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat
File di ricezione del server:
server$ socat -u TCP-LISTEN:9876,reuseaddr OPEN:out.txt,creat && cat out.txt
client$ socat -u FILE:test.txt TCP:127.0.0.1:9876
È affidabile? Può essere migliorato? (Ho usato le giuste opzioni? Ci sono opzioni migliori da configurare? - Ce ne sono così tante con socat)