PerlでFTPに接続した時のeofのようなものを知るには?
[上に]
[前に]
[次に]
mizna
[E-Mail]
1999/05/29(土) 16:01:56
CGI(Perl)でFTP接続を試しています。
Socketを使ってFTPに繋いでいるのですが、
相手のFTPサーバによって
230-ようこそ
230 Logging in
のように違った行数でレスポンスを返してきます。
<>でこれを獲得すると、最後の行で必ず行の終わりを検知できずに止まってしまいます。(eofでも止まってしまいました)
FTP接続時において、eofのような事はできないのでしょうか?
長くなってすみません。
B-Cus
1999/05/29(土) 21:12:38
> 230-ようこそ
230の後に - が付いてるので、継続行があるとわかります。
> 230 Logging in
230の後がスペースなので、ここで終りだとわかります。
http://hp.vector.co.jp/authors/VA002682/rfc959j.htm
http://www2.umin.u-tokyo.ac.jp/internet/rfc/rfc959.txt
mizna
[E-Mail]
1999/05/30(日) 11:28:47
それは確かに最後の行だとわかる方法ですが、
「最後の行を読めなく」なってしまいました。
最後の行を<>で読み込むと、行の終わりを判断できないのか
止まってしまいます。
書いていただいたリンクは非常に参考になりました。
B-Cus
1999/05/30(日) 14:40:27
> それは確かに最後の行だとわかる方法ですが、
なら普通に最後の行まで読めば問題ないはずです。
while (<SOCKET>){
if ( m/^\d\d\d / ){ last; }
}
具体的に、どういうコーディングをしているんですか?
mizna
[E-Mail]
1999/05/31(月) 19:29:13
度々のレス、ありがとうございます。
<>っていうものは「改行コードまでを一気に読む」みたいなものらしいのですが、
その改行コードが送られてきていないのかもしれません。
おそらく全二重通信ができないという事だと思います。
accept()かshutdown()を使うのでしょうか?
B-Cus
1999/05/31(月) 19:47:51
具体的に、どういうコーディングをしているんですか?
どのサーバに接続しても、常にそうなってしまうんですか?
mizna
[E-Mail]
1999/06/01(火) 16:24:13
ただ、
while(<SOCK>){
print;
}
でも駄目でした。
3つの違うサーバに対して行ってみましたが、
UNIXでもNTでも同じ結果です。
B-Cus
1999/06/01(火) 17:40:55
だから、
while(<SOCK>){
print;
if ( m/^\d\d\d / ){ last; }
}
ではどうか、と言っているのですが…。これでもダメなんですか?
[上に]
[前に]
[次に]