С socat
:
mkfifo pipe &&
<pipe socat tcp-listen:"$portB",reuseaddr,fork,bind=localhost - |
socat - tcp:localhost:"$portC" >pipe
Или даже лучше (избегая fifo и дополнительного уровня межпроцессного взаимодействия):
socat "tcp:localhost:$portC" \
"exec:\"socat - tcp-listen:$portB,reuseaddr,fork,bind=localhost\",nofork"
Из-за nofork
, второй socat
будет работать со своими stdin и stdout, напрямую соединенными с сокетом на C.