
現在CentOS上でPythonのftplibを使用したプログラムを作成しているのですが、
動作上問題が生じて、私の力では解決出来ませんでしたので質問させて頂きます。
問題というのは、ファイルをダウンロード中に何らかの形で通信が途切れると、
エラーが発生しないまま処理が止まってしまう、というものです。
以下にコードを記します。
ftp = FTP(host)
ftp.login(user, passwd)
fp = open("file.jpg", "wb")
ftp.retrbinary("RETR file.jpg", fp.write)
fp.close()
ftp.quit()
希望としては、通信が切断された際に例外処理を行いたいと考えています。
解決策や代替案をお持ちの方がいらっしゃいましたら、お力添えお願いします。
No.2ベストアンサー
- 回答日時:
うっかりしていました・・・
TCPでは、無通信状態でのネットワーク障害の検知はちょっと厄介ですね。
TCPに付いてくるKeepAliveを利用する手もありますが、本格的に使用すると
なると力不足だった記憶があります。
import socket
ftp.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
あとは、自前で無意味なデータ照会を定期的に繰り返し、応答がタイムアウト
した場合はネットワーク障害とみなす方法があります。
(大抵の有名ドコロのFTPクライアントはこちらの実装ではないでしょうか)
No.1
- 回答日時:
おそらくですが、処理が止まるのは次のデータを待っているからでは?
TCP接続の基礎ですね。
タイムアウト時間を短くしてみるのも手です。
class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])¶(原文)
(中略)
オプションの timeout 引数は、コネクションの接続時など、ブロックする操作におけるタイムアウト時間を秒数で指定します。 (指定されなかった場合、グローバルのデフォルトタイムアウト設定が利用されます。)
バージョン 2.6 で変更: timeout が追加されました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で通信処理。応答がない場合...
-
バイナリデータ受信時のデータ順
-
WriteFile()でのデータ送信がで...
-
逆コンパイルと逆アセンブルの...
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
アプリケーションが終了するま...
-
COBOLのS9タイプからXタイプへ...
-
.NetのBackgroundWorkerクラス...
-
メモリが不足しています(VBA)
-
スレッドにて同一メモリの書き...
-
プロセスIDからウィンドウハ...
-
openGLで物体を半透明にして表...
-
フレームワーク「4.8.1」で、[S...
-
OSPFでプロセスを分ける意義に...
-
if ( a & b == b )
-
CWnd::OnTimerのスレッドの取得
-
Winsockで接続待ちタイムアウト...
-
C言語からC#への変換ツール
-
VC++2005 CStringをshortに変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
winsockでソケット通信の開発を...
-
socket: recvはいつ,どれだけ...
-
「スイッチングハブのバッファ...
-
VB2005でWin32APIを用いてRS-23...
-
シリアル通信エラー
-
シリアル通信の出力バッファと...
-
バイナリデータ受信時のデータ順
-
WinsockAPIのrecvfromの受信デ...
-
SerialPortのDataReceivedイベ...
-
再現性の無いバグ
-
rs232cでの受信データ(mscomm)...
-
C#で通信処理。応答がない場合...
-
Linuxでのシリアル通信について...
-
WriteFile()でのデータ送信がで...
-
【CAsyncSocket::OnReceive()呼...
-
UDP処理のエラーについて
-
recv関数の受信結果について
-
ReadFile(GPSとの通信)Win7で...
-
VC++ HttpOpenRequest() 正し...
おすすめ情報