এর কারণ সম্পর্কে, উত্তরওয়ানদার ইতিমধ্যে একটি দুর্দান্ত উত্তর লিখেছিলেন ।
এখানে আমি কীভাবে এবং আপেক্ষিক পাথের ব্যবহারের দিকে মনোনিবেশ করব।
অভ্যন্তরীণভাবে, সকেট ফাইলটি নাম দ্বারাও দেখা যায় (আমার ধারনা), সাধারণত ইনোড দ্বারা সন্ধান করা হয়। লিনাক্সে, এই চেহারাটি নেট / ইউনিক্স / আফ_উনিক্স.সি . এ unix_find_socket_byinode()
সংজ্ঞায়িত ফাংশন দ্বারা নিশ্চিত করা হয়েছে ।
এটি সহজে অনুসরণ অনুসরণ করা যেতে পারে:
- এ / এবং বি / দুটি ডিরেক্টরি তৈরি করুন ।
- প্রতিটি ডিরেক্টরিের অধীনে, একই নাম সহ সকেট ফাইলগুলিতে একটি প্রক্রিয়া শোনান। আপনার সাথে
socat
একটি কমান্ড ব্যবহার করা হবে যেমন:
$ socat UNIX-LISTEN:./my.sock -
- এখন সরিয়ে সকেট ফাইল বিনিময় এ / my.sock করার বি / এবং ভাইস বিপরীতভাবে।
- এখন থেকে, ক্লায়েন্ট অ্যাপ্লিকেশন যদি এ / মাই.সক এর সাথে সংযুক্ত হয় তবে এটি সার্ভার বি'র সাথে যোগাযোগ করবে , এবং এটি বি / মাই.সক এর সাথে সংযুক্ত হলে এটি সার্ভার এ-এর সাথে যোগাযোগ করবে (নোট করুন যে যোগাযোগটি শেষ হয়ে গেলেও সার্ভার প্রক্রিয়াটি হতে পারে) এটি নিজের সকেট ফাইল হিসাবে যা মনে করে বৈধভাবে মুছুন।
আমি এই আচরণটি মুষ্টিমেয় ইউনিক্স সিস্টেমে পরীক্ষা করেছি (লিনাক্স দেবিয়ান, ফ্রিবিএসডি এবং ওপেন ইন্ডিয়ানা কিছুটা বৈচিত্র্য পেতে), তাই এই আচরণটি স্ট্যান্ডার্ড না হলেও কমপক্ষে বিস্তৃত বলে মনে হয়।
নিখুঁত পাথগুলি সাধারণত ক্লায়েন্ট এবং সার্ভার প্রক্রিয়াগুলির মধ্যে একটি কনভেনশন হিসাবে ব্যবহৃত হয়, কারণ ক্লায়েন্ট প্রক্রিয়া অন্যথায় সার্ভারের সাথে প্রাথমিক যোগাযোগ কীভাবে প্রতিষ্ঠিত করতে হয় তা না জানতে পারে।
তবে, যদি এই প্রাথমিক যোগাযোগটি কোনও সমস্যা না হয় তবে সকেট ফাইল তৈরির জন্য আপেক্ষিক পাথগুলি ব্যবহার করা নিরাপদ বলে মনে হয়, যখন সকেট ফাইলের অবস্থানটি সার্ভার প্রক্রিয়া দ্বারা সরাসরি নিয়ন্ত্রণ না করা হয় তখন পাথ দৈর্ঘ্যের সমস্যাগুলি এড়াতে দেয়।