ser2net + socat + gammu. socat terminando

1

Estou desenvolvendo um pequeno aplicativo que enviará SMS usando o dispositivo remoto como gateway.

Esses dispositivos estão conectados à VPN, mas isso não importa.

O gateway SMS possui fisicamente porta serial /dev/AMA0 . Estou usando ser2net no SMS Gateway para compartilhar a porta serial pela Internet, e estou usando socat para criar porta serial virtual no VPS e "receber" porta compartilhada.

Aqui estão minhas confissões:

SMS Gw:

cat /etc/ser2net.conf 
3333:raw:0:/dev/ttyAMA0:9600,8DATABITS,NONE,1STOPBIT

VPS:

socat pty,link=/dev/tty_remote_serial,waitslave tcp:10.8.0.2:3333

Estou usando gammu para controlar o dispositivo SMS. Quando eu faço logon no VPS e executo este comando, vejo:

gammu identify
Device               : /dev/tty_remote_rpi_serial
Manufacturer         : SIMCOM_Ltd
Model                : unknown (SIMCOM_SIM800L)
Firmware             : Revision:1308B08SIM800L16
IMEI                 : 867XXXXXXXXXXX23
SIM IMSI             : XXXXXXXXXX491925

E é perfeito. Eu posso usar porta serial remota e tudo funciona perfeito. O problema é quando eu corro gammu identify mais uma vez. O dispositivo /dev/tty_remote_rpi_serial não existe porque socat foi finalizado. Quando eu reinicio o socat service, tudo funciona bem UMA VEZ. Devo reiniciar socat de cada conexão fechada (de mincom) ou comando executado ( gammu identify ).

Existe uma maneira de impedir que socat termine?

2016/01/06 04:50:04 socat[4233] N read(5, 0x16ea680, 8192): Input/output error (probably PTY closed)
2016/01/06 04:50:04 socat[4233] N socket 1 (fd 5) is at EOF
2016/01/06 04:50:04 socat[4233] I shutdown(6, 1)
2016/01/06 04:50:04 socat[4233] D shutdown()  -> 0
2016/01/06 04:50:04 socat[4233] D data loop: sock1->eof=2, sock2->eof=0, closing=1, wasaction=1, total_to={0.000000}
2016/01/06 04:50:04 socat[4233] D select(7, &0x40, &0x0, &0x0, &999.000000)
2016/01/06 04:50:04 socat[4233] D select -> (, 0x40, 0x0, 0x0, &998.974365), 1
2016/01/06 04:50:04 socat[4233] D read(6, 0x16ea680, 8192)
2016/01/06 04:50:04 socat[4233] D read -> 0
2016/01/06 04:50:04 socat[4233] N socket 1 (fd 5) is at EOF
2016/01/06 04:50:04 socat[4233] I shutdown(6, 1)
2016/01/06 04:50:04 socat[4233] D shutdown()  -> -1
2016/01/06 04:50:04 socat[4233] I shutdown(6, 1): Transport endpoint is not connected
2016/01/06 04:50:04 socat[4233] N socket 2 (fd 6) is at EOF
2016/01/06 04:50:04 socat[4233] I close(5)
2016/01/06 04:50:04 socat[4233] D close()  -> 0
2016/01/06 04:50:04 socat[4233] D unlink("/dev/tty_remote_rpi_serial")
2016/01/06 04:50:04 socat[4233] D unlink()  -> 0
2016/01/06 04:50:04 socat[4233] I shutdown(6, 2)
2016/01/06 04:50:04 socat[4233] D shutdown()  -> -1
2016/01/06 04:50:04 socat[4233] I shutdown(6, 2): Transport endpoint is not connected
2016/01/06 04:50:04 socat[4233] N exiting with status 0
2016/01/06 04:50:04 socat[4233] D exit(0)
2016/01/06 04:50:04 socat[4233] D starting xioexit()
2016/01/06 04:50:04 socat[4233] D finished xioexit()
    
por user3595893 06.01.2016 / 05:15

1 resposta

1

Use

while sleep 1; do
    socat pty,link=/dev/tty_remote_serial,waitslave tcp:10.8.0.2:3333;
done 
    
por 17.01.2016 / 23:06