前提・実現したいこと
・URLSessionを使いFTPでファイルをダウンロードする。
・物理的な接続断等に対応するため、5秒のタイムアウトを設ける。
発生している問題・エラーメッセージ
・タイムアウト発生後、接続を回復し、再度ダウンロード実行してもタイムアウトエラーとなる。
・アプリケーションを再起動するまで治らない。
・HTTPアクセスは可能(Alamofire使用)なので、通信はできている。
・タイムアウトを発生させなければ、何度でもダウンロード可能。
Task <******>.<*> finished with error [-1001] Error Domain=NSURLErrorDomain Code=-1001 "The request timed out."
該当のソースコード
Swift
1 2 // FTP処理呼び出し(関数名などは省略、呼び出し部のみ) 3 // Lists:ダウンロードファイル名一覧 4 DispatchQueue.global(qos: .background).async { [weak self] in 5 for i in 0..<self!.Lists.count 6 { 7 if !self!.isFileExist(self!.Lists[i]) 8 { 9 self?.ftpRequest(self!.Lists[i]) 10 if self!.ftpStatus == .error 11 { 12 break; 13 } 14 } 15 } 16 17 DispatchQueue.main.async { 18 if self?.ftpStatus == .error 19 { 20 // ファイルのダウンロードに失敗 21 } 22 else 23 { 24 // something else... 25 } 26 } 27 } 28 29 // FTPダウンロード処理 30 // URLは適当です 31 func ftpRequest(_ file: String) 32 { 33 let url = URL(string: "ftp://hoge:hoge@192.168.1.100/" + file)! 34 35 // 5秒のタイムアウトとする 36 let request = URLRequest(url: url,timeoutInterval: 5) 37 let session = URLSession(configuration: .default,delegate: nil,delegateQueue: OperationQueue.main) 38 39 let task = session.dataTask(with: request) { (data,response,error) in 40 session.finishTasksAndInvalidate() 41 42 //guardにはelseが必要 43 //guard let error = error 44 if let error = error 45 { 46 self.ftpStatus = .error 47 self.semaphore.signal() 48 return 49 } 50 51 guard let data = data else 52 { 53 self.ftpStatus = .error 54 self.semaphore.signal() 55 return 56 } 57 58 // (省略) data を保存する処理など 59 self.ftpStatus = .pass 60 self.semaphore.signal() 61 } 62 task.resume() 63 self.semaphore.wait() 64 }
試したこと
・問題発生中のターゲット(iPad)に、他のPCからFTP Clientを使いダウンロードすると、ダウンロードできる。
・その後、iPadからダウンロードを試しても、やっぱりだめ。
・アプリケーションを再起動すると、ダウンロード可能になる。
このことから、アプリ側で
・何かのセッション/タスクが残っている
と考えられますが、session.finishTasksAndInvalidate()も呼んでいるし、原因が分からずです。
FTPはもう使わない方がいいというのは理解してますが、
相手(サーバー側)が変えれないので、仕方なく使用しています。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/11/03 10:22
2021/11/03 11:16 編集
退会済みユーザー
2021/11/04 00:11 編集
退会済みユーザー
2021/11/04 00:30