( tttaaa | 2024. 05. 14., k – 19:12 )

nem lehet úgy, hogy előbb elküldöm a socat-tel az inicializálást, aztán külön socat a többi utasításnak

Persze hogy nem. Amikor a socat-ot tartalmazó pipeline lefut, az általa létrehozott file descriptor-ok megszűnnek, azaz a socket lezáródik. A szerver számára minden új kapcsolódás egyben új klienst jelent. Amíg olyan egyszerű dolgot akarsz, mint valamilyen input alapján generált parancs elküldése, addig teljesen jól működik az, ahogy írtad, tehát hogy mindhez külön inicializálás, stb. De bármi bonyolultabb (ablak kezelése, események feldolgozása) esetén már nagyon nem optimális, inkább antipattern. Működhet pl. a socat UNIX-CONNECT:/tmp/.X11-unix/X0 EXEC:/path/to/script formátum. Így a script stdout-ját a socat továbbítja a már kapcsolódott socket-be, ill. a socket-ből a script stdin-jére. Gyakorlati haszna még így is kétséges, mert minden parancsot string-ként előállítani, átalakítani (pl. xxd -r) binárissá; minden beérkező bináris adatot stringre (pl. xxd), és így elemezni lényegesen nagyobb cpu használattal (a c-ben írthoz képest), valamint rengeteg fork() rendszerhívással jár.