Thread select() tut unverständliches: select, vec, fileno .... (3 answers)
Opened by Relais at 2003-08-29 19:07

Relais
 2003-08-29 19:07
#81357 #81357
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Folgender legacy-Code läuft und läuft. Jedoch nicht mit einem FTP-Proxy...

CMD ist ein Socket mit bestehender FTP-Verbindung.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    $cmd = "quote site ftp.example.com";

...

local($rin);
print CMD $cmd,"\r\n";

vec($rin,fileno(CMD),1) = 1;
for (;;) {
if (($Timeout==0) || select($rout=$rin, undef, undef, $Timeout)) {
unless(sysread(CMD, $buf, 1024)) {
$Error = "Unexpected EOF on command channel";
return undef;
}
}

...

}


Das führt zu ebendem "Unexpected EOF on command channel".
Das Kommando, an dem sich der FTP-Proxy stört lautet allerdings:
"QUOTE site ftp.example.com"

Warum Großbuchstaben beim ersten Wort? Es ist definitiv in dem obigen print noch in Kleinbuchstaben gewesen, daß zeigt der Perl-Debuger.

Manuelles ftp ist auch möglich, das Kommando "quote site ftp.example.com" stellt den Proxy vollständig zufrieden. Nur mit "QUOTE site ftp.example.com" kommt er nicht klar.

Habt ihr ne Idee? Die welt des 4-Argumente-select() ist mir und meinen Kollegen leider ziemlich fremd. Die perldocs zu <!--pod_f1--><a href="//www.perldoc.com/perl5.8.0/pod/func/select.html" target="_blank">perldoc <!--pod_f2-->-f select<!--pod_f3--></a><!--pod_f4-->, <!--pod_f1--><a href="//www.perldoc.com/perl5.8.0/pod/func/vec.html" target="_blank">perldoc <!--pod_f2-->-f vec<!--pod_f3--></a><!--pod_f4--> und <!--pod_f1--><a href="//www.perldoc.com/perl5.8.0/pod/func/fileno.html" target="_blank">perldoc <!--pod_f2-->-f fileno<!--pod_f3--></a><!--pod_f4--> sind sicherlich gut gemeint und zeigen verflixt ähnlichen Code wie den obigen, nur sie beschreiben ihn nicht so, daß ich daraus schlau würde. Ist hier vielleicht jemand bereits so schlau?\n\n

<!--EDIT|Relais|1062169719-->
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming

View full thread select() tut unverständliches: select, vec, fileno ....