সকেট প্রোগ্রামিংয়ে এএফপিইটি এবং পিএফএনপিইটির মধ্যে পার্থক্য কী?
আমি এএএনপিএনইটি এবং পিএফএনপিইটি ব্যবহারের মধ্যে বিভ্রান্ত socket()
এবং bind()
।
এছাড়াও, sin_addr
ক্ষেত্রে আইপি-ঠিকানা দিতে কিভাবে ?
সকেট প্রোগ্রামিংয়ে এএফপিইটি এবং পিএফএনপিইটির মধ্যে পার্থক্য কী?
আমি এএএনপিএনইটি এবং পিএফএনপিইটি ব্যবহারের মধ্যে বিভ্রান্ত socket()
এবং bind()
।
এছাড়াও, sin_addr
ক্ষেত্রে আইপি-ঠিকানা দিতে কিভাবে ?
উত্তর:
বিজের বিখ্যাত নেটওয়ার্ক প্রোগ্রামিং গাইডটি একটি দুর্দান্ত ব্যাখ্যা দেয়:
কিছু ডকুমেন্টেশনে আপনি একটি রহস্যময় "পিএফএনপিইটিইটি" এর উল্লেখ দেখতে পাবেন। এটি একটি অদ্ভুত ইথেরিয়াল জন্তু যা খুব কমই প্রকৃতিতে দেখা যায় তবে আমি এখানে এটি কিছুটা স্পষ্ট করে বলতে পারি। অনেক দিন আগে একবার, এমন ধারণা করা হয়েছিল যে কোনও ঠিকানা পরিবার ("এএফএনপিইটি" এর "এএফ" বলতে কী বোঝায়) তাদের প্রোটোকল পরিবার দ্বারা উল্লেখ করা একাধিক প্রোটোকলকে সমর্থন করতে পারে ("পিএফএনপিইটি" এর "পিএফ" বলতে কী বোঝায়? )।
তা হয়নি। আচ্ছা ভালো. সুতরাং করণীয় সঠিক জিনিস হ'ল আপনার স্ট্রাক্ট সোকাড্ডার_ইনগুলিতে এএএনপিএনইটি এবং সকেটে আপনার কলটিতে পিএফএনপিইটি ব্যবহার করা ()। তবে ব্যবহারিকভাবে বলতে গেলে আপনি যে কোনও জায়গায় এএএনপিএনইটিইটি ব্যবহার করতে পারেন। এবং, যেহেতু ডব্লু। রিচার্ড স্টিভেনস তাঁর বইয়ে যা করেছেন, আমি এখানে এটি করব।
আমি লিনাক্স কার্নেল উত্স কোডে পেয়েছি যে পিএফএনপিইটি এবং এএফপিইটি একই রকম। নিম্নলিখিত কোডটি ফাইল থেকে লিনাক্স কার্নেল ৩.২.২১ গাছের লাইন / লিনাক্স / সকেট। অন্তর্ভুক্ত রয়েছে ।
/* Protocol families, same as address families. */
...
#define PF_INET AF_INET
/usr/src/linux-headers-<kernel_version>/include/linux/socket.h
অর্থ, AF_INET
ইন্টারনেট থেকে নির্দিষ্ট ঠিকানাগুলি, আইপি অ্যাড্রেসগুলি নির্দিষ্ট করে।PF_INET
প্রোটোকলের যে কোনও কিছুকে সাধারণত সকেট / পোর্ট বোঝায়।
সকেট (2) এবং বাইন্ড (2) এর জন্য ম্যান পৃষ্ঠাগুলি পড়ার বিষয়ে বিবেচনা করুন । জন্য sin_addr
ক্ষেত্র, শুধু এটা সেট করতে নিচের মত কিছু করতে:
struct sockaddr_in addr;
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
man <section> <topic>
, যেমন man 2 bind
।
আসলে, এএফ_ এবং পিএফ_ একই জিনিস। উইকিপিডিয়ায় কিছু শব্দ আপনার বিভ্রান্তি দূর করবে
প্রোটোকল টাইপ (পরিবার) এবং প্রতিটি ব্যবহার করতে পারে এমন নির্দিষ্ট ঠিকানা ধরণের মধ্যে পার্থক্যযুক্ত সকেট ইন্টারফেসের মূল নকশা ধারণা। এটি কল্পনা করা হয়েছিল যে কোনও প্রোটোকল পরিবারে বেশ কয়েকটি ঠিকানার প্রকার থাকতে পারে। ঠিকানা প্রকারগুলি অতিরিক্ত প্রতীকী ধ্রুবক দ্বারা PF_ এর পরিবর্তে উপসর্গ AF_ ব্যবহার করে সংজ্ঞায়িত করা হয়েছিল। এএফ_-শনাক্তকারীরা সমস্ত ডেটা স্ট্রাকচারের জন্য লক্ষ্যযুক্ত যা প্রোটোকল পরিবার নয়, ঠিকানার ধরণের সাথে বিশেষভাবে ডিল করে। তবে, প্রোটোকল এবং ঠিকানার ধরণের পৃথকীকরণের এই ধারণাটি বাস্তবায়ন সমর্থন খুঁজে পায় না এবং এএফ_-কনস্ট্যান্টগুলি কেবলমাত্র প্রাসঙ্গিক সনাক্তকারী দ্বারা এএফ_ বনাম পিএফ_ কনস্ট্যান্টের মধ্যে পার্থক্যটি উল্লেখযোগ্যভাবে ব্যবহারিক পরিণতির কোনও প্রযুক্তিগত যুক্তি উপস্থাপন করে সংজ্ঞায়িত করা হয়। সত্যই, উভয় ফর্মের যথাযথ ব্যবহারে অনেক বিভ্রান্তি রয়েছে।
এফএনইটিইটি = ঠিকানার ফর্ম্যাট, ইন্টারনেট = আইপি ঠিকানাগুলি
পিএফএনপিইটি = প্যাকেটের ফর্ম্যাট, ইন্টারনেট = আইপি, টিসিপি / আইপি বা ইউডিপি / আইপি
এএফপিইটিটি হ'ল ঠিকানা পরিবার যা আপনার তৈরি করা সকেটের জন্য ব্যবহৃত হয় (এক্ষেত্রে একটি ইন্টারনেট প্রোটোকল ঠিকানা)। উদাহরণস্বরূপ, লিনাক্স কার্নেল ইউএনআইএক্স সকেট এবং আইপিএক্সের মতো 29 টি অন্যান্য পরিবারকে সমর্থন করে এবং আইআরডিএ এবং ব্লুটুথের সাথে যোগাযোগ করে (এএফ_আইআরডিএ এবং এএফ_ ব্লুটুথ, তবে সন্দেহজনক যে আপনি এগুলি এত কম স্তরে ব্যবহার করবেন)।
কোনও নেটওয়ার্কে সকেট প্রোগ্রামিংয়ের জন্য বেশিরভাগ অংশের জন্য এএএনপিএনইটি দিয়ে স্টিক করা সবচেয়ে নিরাপদ বিকল্প।
অর্থ, এএফপিইটিটি বিশেষত ইন্টারনেট, আইপি ঠিকানা থেকে প্রাপ্ত ঠিকানাগুলিকে বোঝায়।
পিএফএনপিইটি প্রোটোকলের যে কোনও কিছুকে সাধারণত সকেট / পোর্ট বোঝায়।
এমন পরিস্থিতি রয়েছে যেখানে এটি গুরুত্বপূর্ণ।
যদি আপনি এএফপিইটি পাস করেন socket()
আপনার সকেট এলোমেলোভাবে রিসেট হতে পারে বা নাও হতে পারে। পিএফএনপিইটি পাস করা নিশ্চিত করে যে সংযোগটি সঠিকভাবে কাজ করে।
সাইগউইন স্ব-স্বীকারোক্তিতে সকেট প্রোগ্রামিংয়ের জন্য একটি বিশাল জগাখিচুড়ি, তবে এটি এমন একটি আসল ওয়ার্ল্ড কেস যেখানে এএফএনপেট এবং পিএফএনপিইটি এক নয়।
#define PF_INET AF_INET
সাইগউইনে খুঁজে পাই socket.h
।
শিরোনাম ফাইলটি পরীক্ষা করা সমস্যার সমাধান। কেউ সেখানে সিস্টেম সংকলক পরীক্ষা করতে পারেন।
আমার সিস্টেমের জন্য, এএফ.এন.পি. == পিএফ.এন.পি.
এএফ == ঠিকানা পরিবার এবং পিএফ == প্রোটোকল পরিবার
প্রোটোকল পরিবার, ঠিকানার পরিবারগুলির মতো।
/usr/src/linux-headers-X.X.X-XX-generic/include/linux/socket.h