2015-01-19 20 views
5

Questo comand (riindirizzamento seriale) accetta una singola connessione TCP: 11313:Socat termina dopo legame stretto

socat PTY,link=/dev/ttyV1,echo=0,raw,unlink-close=0 TCP-LISTEN:11313,forever,reuseaddr 

Tuttavia quando la connessione viene persa, il processo socat sopra viene ucciso e il client non è in grado per connettere.

Posso risolvere questo problema aggiungendo l'opzione fork alla fine del comando precedente. Ma poi più client saranno in grado di connettersi. Ma voglio accettare solo una connessione.

Qualche idea su come raggiungere questo obiettivo?

+0

Può essere ser2net (http://ser2net.sourceforge.net/) è quello che serve? – Maquefel

+0

@Maquefel hai esperienza con ser2net. Per me sembra che stiano facendo lo stesso. –

+1

I have - ser2net è una cosa specializzata che non può fare la maggior parte delle cose come socat, è stato progettato appositamente per l'inoltro seriale su Ethernet. Ma si comporta esattamente come si desidera - una porta - una connessione, non esce quando la connessione è chiusa e notifica la nuova connessione in entrata sulla porta in uso. – Maquefel

risposta

7

È possibile limitare il numero di bambini con l'opzione max-children:

LISTEN gruppo di opzioni, soluzioni specifiche per l'ascolto prese

max-bambini = Limita il numero di processi figli concorrenti [int] . L'impostazione predefinita è illimitata.

Con questo è possibile limitare il numero di client che possono interagire con il PTY a uno, ma non impedirà ad altri di connettersi. Gli altri faranno semplicemente la coda fino a quando la prima connessione non verrà chiusa. Se si vuole evitare che, io suggerirei di avvolgere solo la chiamata socat in un ciclo while true; do ..; done:

while true; do 
    socat PTY,link=/dev/ttyV1,echo=0,raw,unlink-close=0 TCP-LISTEN:11313,forever,reuseaddr 
done 
+1

meglio usare 'mentre si dorme 1; fare .. ; done loop', perché alcune shell non sono in grado di gestire correttamente il segnale SIGINT in questo ciclo, e potresti non essere in grado di interrompere correttamente il ciclo –

+0

Quindi dovrei sostituire ".." con il mio comando socat? –

+1

Sì. Ho aggiornato la risposta con il comando esatto. Lo snippet esegue socat in un ciclo infinito, riavviandolo immediatamente ogni volta che si chiude. Se non hai mai lavorato con loro, considera il suggerimento di Gabor e sostituisci 'true' con' sleep 1' per i principianti. – Phillip

Problemi correlati