আমি ধরে নিয়েছি যে "sftp ক্লায়েন্ট" দ্বারা আপনি একটি ওপেনএসএইচ এসএফটিপি ক্লায়েন্টকে উল্লেখ করেছেন। "সমস্যা "টি হ'ল আপনি যখন Ctrl+Cটিপেন তখন এটি আপলোডটি থামিয়ে দেয় এবং পরিষ্কারভাবে দূরবর্তী ফাইলটি বন্ধ করে দেয়, ঠিক যেমন আপলোড সম্পূর্ণরূপে সমাপ্ত হয় (নোট করুন এটি একটি সঠিক আচরণ এবং অন্যান্য অনেক এসএফটিপি ক্লায়েন্ট একই আচরণ করে)। তাই আপলোডটি বাধাগ্রস্ত হয়েছে তা জানাতে সার্ভারের একেবারেই কোনও উপায় নেই।
ওপেনএসএসএইচ ক্লায়েন্টটি ফাইলটি তৈরি করার সময় সার্ভারে একটি আকারের ইঙ্গিত প্রেরণ করার সাথে এটির কঠোরভাবে কথা বলতে হবে। তবে ওপেনএসএইচ সার্ভারটি সেই তথ্য ব্যবহার করে না এমনকি লগও করে না। যদিও আকারটি লগ করার জন্য কোডটি সংশোধন করা বেশ সহজ হবে, যদি এটি আপনার জন্য বিকল্প হয়।
দেখা process_open
এ sftp-server.c
:
a = get_attrib();
flags = flags_from_portable(pflags);
mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? a->perm : 0666;
logit("open \"%s\" flags %s mode 0%o",
name, string_from_portable(pflags), mode);
logit
বিবৃতিটি এতে পরিবর্তন করুন :
logit("open \"%s\" flags %s mode 0%o size %llu",
name, string_from_portable(pflags), mode, (unsigned long long)a->size);
নোট করুন যে আকারের ইঙ্গিতটি পাঠানো .চ্ছিক। কিছু এসএফটিপি ক্লায়েন্ট এটিকে প্রেরণ করবে (উদাঃ ওপেনএসএসএইচ বা উইনসিসিপি), কিছু না (যেমন পিএসএফটিপি, ফাইলজিলা, বা এলএফটিপি) দেবে না। যেমন একটি ক্ষেত্রে, আপনি 0 ইন পাবেন a->size
।
ক্লায়েন্ট যদি সত্যিই আপলোডটি বাতিল করে দেয় (রিমোট ফাইলটি পরিষ্কারভাবে বন্ধ না করে, যেমন কখন sftp
হত্যা করা হয়), আপনি এটি "বাধ্য" উপসর্গ থেকে "বন্ধ" রেকর্ডে বলতে সক্ষম হবেন:
জোর করে "/data/README.md" বাইটস 0 লিখিত 5366 পড়ুন