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
2239 articles
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 -- Frankfurt.pm-Treffen am Dienstag 07.01.2020 im Café Diesseits
22. Deutscher Perl-Workshop 04. bis 06.03.2020 in Erlangen.
Frankfurt Perl-Workshop 2020-1 ca. Mai-Juni 2020 im Haus der Jugend

Winter is Coming

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