Niki Hammler: Multiplexing - ein select Problem?

Hallo!

(Im Vornherein sorry, hat nicht wirklich was mit Web zu tun aber mit Perl)

Ich will eine Multiplexing Applikation in Perl schreiben, die zwischen einem geöffneten Socket S, STDIN und STDOUT multiplexen soll. Es soll ein Proxy werden, der über inetd gestartet wird. Im Internet findet man

select((select(STDOUT), $| = 1)[$[]);
select((select(STDIN), $| = 1)[$[]);
exec "/usr/bin/netcat host.in.netz port";

Das funktioniert auch wunderbar. Doch mag ich die Daten, die lokal zum proxy weiterleiten, manipulieren (nur in die Richtung nach draussen, herein brauch' ich keine Manipulation).

Desweiteren soll gesagt sein, dass es sich um einen NNTP Proxy handeln soll, d.h. es sollen immer ganze Zeilen verarbeitet werden, was andres kommt bei NNTP eh nicht vor.

Jetzt hab ich aber bei folgendem Code ein Problem:

(Das socket S ist bereits auf den Host im Netz geöffnet)

select(S);
$| = 1;
select(STDIN);
select(STDOUT);
while(1)
{
  $status = <S>;
  print STDOUT $status;

$in = <STDIN>;
  print S $in;
}
close(S);

Das funktioniert gar nicht mal soo schlecht!
Ich starte das Script und schon erhalte ich die Begrüssung des NNTP Servers. Eine Eingabe von "LIST" liefert dann auch das erste Element der Liste zurück! Die anderen erscheinen nur durch immer erneutes Drücken der Enter-Taste.
STDIN scheint also noch blockiert zu sein, wartet also auf eine Enter Eingabe. Aber ich hab doch ein select(STDIN) gemacht.
Ich hab auch einige andere Kombinationen ausprobiert aber es geht nicht.

Kann mir irgendwer helfen?

Vielen Dank im Vorraus!

Niki

  1. Hat sich erübrigt.
    Ich dachte, in Perl schaff ich's schneller!
    30 Minuten in C programmiert und es läuft perfekt!

    Niki