जैसा कि मैंने समझा कि ऐसा तब होता है जब कोई ग्राहक कनेक्शन के लिए अनुरोध करता है:
- सर्वर एक विशेष पोर्ट नंबर के लिए बाध्य होगा। पोर्ट नंबर हमेशा एक सुनने की प्रक्रिया से जुड़ा होता है। चूंकि केवल सर्वर आने वाले कनेक्शनों के लिए सुन रहा है, हमें क्लाइंट की तरफ से बांधने की जरूरत नहीं है
- सर्वर उस पोर्ट नंबर पर सुरीनीग पर रखेगा।
- ग्राहक एक
connect()
अनुरोध भेजेगा । - सर्वर अनुरोध का उपयोग करके स्वीकार करेगा
accept()
। जैसे ही सर्वर क्लाइंट अनुरोध को स्वीकार करता है, कर्नेल आगे के लिए सर्वर के लिए एक यादृच्छिक पोर्ट नंबर आवंटित करता हैsend()
औरreceive()
, चूंकि सर्वर पर समान पोर्ट नंबर का उपयोग सुनने के साथ-साथ भेजने के लिए नहीं किया जा सकता है, और पिछला पोर्ट अभी भी है नए कनेक्शन के लिए सुन रहा है
यह सब देखते हुए, सर्वर को कैसे पता चलता है कि क्लाइंट किस पोर्ट पर प्राप्त कर रहा है? मुझे पता है कि क्लाइंट एक सोर्स पोर्ट और डेस्टिनेशन पोर्ट के साथ TCP सेगमेंट भेजेगा, इसलिए सर्वर उस सेगमेंट के सोर्स पोर्ट को अपने डेस्टिनेशन पोर्ट के रूप में इस्तेमाल करेगा, लेकिन उस पोर्ट के बारे में पता लगाने के लिए सर्वर किस फंक्शन को कॉल करता है? क्या यह है accept()
?