การเชื่อมต่อถูกบล็อกหรือไม่?
การเชื่อมต่อถูกบล็อกหรือไม่?

วีดีโอ: การเชื่อมต่อถูกบล็อกหรือไม่?

วีดีโอ: การเชื่อมต่อถูกบล็อกหรือไม่?
วีดีโอ: วิธีตั้งค่าเข้าใช้งานเว็บที่โดนบล็อกหรือถูกบล็อก/Sprite channel one/Ep.Duckfather 2024, เมษายน
Anonim

เชื่อมต่อ คือ การปิดกั้น โดยค่าเริ่มต้น แต่คุณสามารถทำให้ไม่ใช่ การปิดกั้น โดยผ่านไปยังซ็อกเก็ตแฟล็ก SOCK_NONBLOCK เชื่อมต่อ () บล็อกจนกว่าจะเสร็จสิ้นการจับมือ TCP 3-way การจับมือกันทางด้านการรับฟังถูกจัดการโดย TCP/IP stack ในเคอร์เนลและเสร็จสิ้นโดยไม่แจ้งให้ผู้ใช้ทราบ

ในทำนองเดียวกันจะถามว่าอะไรคือบล็อกและไม่บล็อกซ็อกเก็ต?

ใน การปิดกั้น โหมด, recv, ส่ง, เชื่อมต่อ (TCP เท่านั้น) และยอมรับ (TCP เท่านั้น) เบ้า การเรียก API จะ บล็อก ไปเรื่อย ๆ จนกว่าจะได้ดำเนินการตามที่ร้องขอ ใน ไม่ใช่ - การปิดกั้น โหมด ฟังก์ชันเหล่านี้จะกลับมาทันที เลือก will บล็อก จนกระทั่ง เบ้า พร้อมแล้ว

ฟังก์ชั่นการบล็อกคืออะไร? NS ฟังก์ชั่นการปิดกั้น โดยทั่วไปจะคำนวณตลอดไป นั่นคือสิ่งที่มันหมายถึงโดย การปิดกั้น . อื่น ฟังก์ชั่นการปิดกั้น จะรอให้ IO เกิดขึ้น ไม่ใช่ การปิดกั้น ระบบ IO หมายถึง a การทำงาน เริ่มต้นการดำเนินการ IO จากนั้นไม่ได้ใช้งาน จากนั้นจึงจัดการผลลัพธ์ของการดำเนินการ IO เมื่อมันเกิดขึ้น

ต่อมาคำถามคือ socket ยอมรับการบล็อคหรือไม่?

ยอมรับ () บล็อกผู้โทรจนกว่าจะมีการเชื่อมต่อ หากไม่มีพื้นที่ข้อความที่ เบ้า เพื่อเก็บข้อความที่จะส่ง จากนั้น send() ปกติจะบล็อก หากไม่มีข้อความที่ เบ้า , การเรียก recv จะรอให้ข้อความมาถึง

เลือกบล็อกหรือไม่?

หากอาร์กิวเมนต์การหมดเวลาชี้ไปที่อ็อบเจ็กต์ประเภท struct timeval ที่มีสมาชิกเป็น 0 เลือก () ไม่ บล็อก . หากอาร์กิวเมนต์การหมดเวลาเป็น NULL เลือก () บล็อกจนกว่าเหตุการณ์จะทำให้มาสก์ตัวใดตัวหนึ่งถูกส่งคืนด้วยค่าที่ถูกต้อง (ไม่ใช่ศูนย์)