Socat wartet ständig auf Eingaben von stdin

616
Mario S

Ich muss diesen Befehl unter Mac OS X El Capitan ausführen. Ich habe es in diesem Leitfaden über Eclipse Che gefunden . Wenn ich dies jedoch versuche, socatwartet ich immer auf die Eingabe von stdin.

$ socat -d TCP-LISTEN:2376,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock I'm writing here, and I don't know why socat let me do this  ^C$ 

Ich muss Ctrl+ drücken C, um zur Eingabeaufforderung zurückzukehren. Was mache ich falsch?

0

1 Antwort auf die Frage

1
Daniel B

Der Autor hat es wahrscheinlich nie probiert. Das Handbuch sagt dies über die forkOption:

Nachdem eine Verbindung hergestellt wurde, wird der Kanal in einem untergeordneten Prozess behandelt. Der übergeordnete Prozess versucht, weitere Verbindungen herzustellen, entweder durch Abhören oder durch Verbinden in einer Schleife (Beispiel).

Das heißt, es socatwird nicht vor dem Start der Haupthörschleife verzweigt.

Die -dOption erhöht nur die Ausführlichkeit (wie in debug).

tl; dr: socatkann das nicht.

Der Quellbaum enthält dieses Hilfsskript, das socatim Hintergrund gestartet werden soll . Sie können es an Ihre Zwecke anpassen. Ich habe dieses Skript nicht geschrieben!

#! /bin/sh # source: daemon.sh # Copyright Gerhard Rieger 2001 # Published under the GNU General Public License V.2, see file COPYING  # This script assumes that you create group daemon1 and user daemon1 before. # they need only the right to exist (no login etc.)  # Note: this pid file mechanism is not robust!  # You will adapt these variables USER=daemon1 GROUP=daemon1 INIF=fwnonsec.domain.org OUTIF=fwsec.domain.org TARGET=w3.intra.domain.org INPORT=80 DSTPORT=80 # INOPTS="fork,setgid=$GROUP,setuid=$USER" OUTOPTS= PIDFILE=/var/run/socat-$INPORT.pid OPTS="-d -d -lm" # notice to stderr, then to syslog SOCAT=/usr/local/bin/socat  if [ "$1" = "start" -o -z "$1" ]; then  $SOCAT $OPTS tcp-l:$INPORT,bind=$INIF,$INOPTS tcp:$TARGET:$DSTPORT,bind=$OUTIF,$OUTOPTS </dev/null & echo $! >$PIDFILE  elif [ "$1" = "stop" ]; then  /bin/kill $(/bin/cat $PIDFILE) fi