web-dev-qa-db-ja.com

サーバー側が終了しても、socatはudpクライアントを終了しません

サーバ側:

socat udp-l:2023,reuseaddr,fork exec:/bin/bash,pty,setsid,setpgid,stderr,ctty

クライアント側:

socat -,raw,echo=0 udp:localhost:2023

Bashを終了すると、サーバー側は終了しますが、クライアントは終了しません。

[root@udp-server-v1-9cdc7f96f-pwdjq /]# exit
exit
^C[root@udp-server-v1-9cdc7f96f-pwdjq /]# 

この後、いずれかのキーを押すと、socatはサーバーに再び接続します。 ps -efは、サーバー側が新しいbashをフォークすることを示しています。これは新しい接続です。

1
lamplet

UDPはコネクションレス型です。サーバーが終了しても、クライアントに通知は送信されません。

この動作が必要な場合、およびデータの信頼性の高い配信が必要な場合は、UDPではなくTCPを使用してください。

2