เนื่องจากคุณไม่ได้ขอวิธีแก้ปัญหา แต่เป็นพื้นหลังทั้งหมด:
- ตรวจสอบที่อยู่ bind_host ของคุณ (เช่น "localhost") ที่แก้ไขเป็น:
$ python3 -c "นำเข้าซ็อกเก็ต
พิมพ์(set([a[4][0] for a in socket.getaddrinfo('localhost', 4822)]))"
{'127.0.0.1', '::1'}
- อาจเปิดปัญหาใหม่เพื่อให้ guacd ใช้การรองรับ dual-stack IPv4/IPv6 อย่างเหมาะสม และอนุญาตให้ระบุ bind_host ซึ่งมีที่อยู่ต่างกันหลายอัน
ฉันแก้ไขการรองรับ IPv6 เท่านั้นใน guacd https://issues.apache.org/jira/browse/GUACAMOLE-1190 ซึ่งเพียงพอสำหรับจุดประสงค์ของฉัน
รองรับ IPv6 dual-stack ที่เหมาะสมในเซิร์ฟเวอร์ TCP ใดๆ ในขณะที่ยังอนุญาตให้ผู้ใช้จำกัดการเชื่อมโยงกับที่อยู่เฉพาะ หมายความว่า:
- สร้างซ็อกเก็ตหลายตัว
ผูก()
ไปยังที่อยู่ทั้งหมดที่ส่งกลับโดย getaddrinfo()
(127.0.0.1 และ ::1 สำหรับ "localhost")
ฟัง()
บนซ็อกเก็ตที่เชื่อมต่อสำเร็จทั้งหมด
- ใช้
เลือก()
หรือ แบบสำรวจความคิดเห็น ()
เพื่อตอบสนองต่อไคลเอนต์ที่เข้ามาบนซ็อกเก็ตที่ถูกผูกไว้ทั้งหมดในคราวเดียว
- เรียก
ยอมรับ()
เพื่อยอมรับการเชื่อมต่อไคลเอ็นต์หลังจากนั้น เลือก()
ส่งคืนโดยไม่มีข้อผิดพลาดสำหรับซ็อกเก็ตบางตัวในชุด
สำหรับการอ้างอิง ดูคำตอบ/ไซต์เหล่านี้:
ความหมายของ :: และ 0.0.0.0 ใน dual-stack OSes
วิธีรองรับการเชื่อมต่อทั้ง IPv4 และ IPv6
เลือก - การมัลติเพล็กซ์ I / O แบบซิงโครนัส