Я работаю с кодом в Windows, затем нахожу одну интересную проблему.
сначала создайте один сокет v6 с anyaddr и установите для ipv6 значение false на port1 и слушайте
второй создайте один сокет v4 сanyaddr на port1 успешно и слушают
, возвращают второй шаг и первый шаг, сначала создают сокет v4, затем сокет v6, это успешно
в Linux, сокет позже создает ошибку возврата связывания.поэтому мой вопрос: почему Windows выглядит так, и как этого избежать? (используйте пару сокетов v6only и v4?)
Я пробую Windows 7 и Windows 10 с кодом Python3 и C.все тесты, как на.
#in interpreter 1
import socket
v4 = socket.socket()
v4.bind(('0.0.0.0',8888))
v4.listen(15)
#in interpreter 2
import socket
v6 = socket.socket(socket.AF_INET6)
# IPPROTO_IPV6 on my system is 41
# IPV6_V6ONLY on my systen is 27
# i found thest two value in window c headers
# after set , i use getsockopt check, it sets successfully
v6.setsockopt(41, 27, 0)
v6.bind(("::", 8888))
# netstat -n -a
# TCP 0.0.0.0:8888 0.0.0.0:0 LISTENING 6796
# TCP 0.0.0.0:8888 0.0.0.0:0 LISTENING 11612
# TCP [::]:8888 [::]:0 LISTENING 6796
Я ожидаю, что второй сокет не удастся связать, но он успешно связывается.