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; }
 }
ではどうか、と言っているのですが…。これでもダメなんですか?

[上に] [前に] [次に]