У меня возникли проблемы с использованием необработанных сокетов IPv6 в python. Подключаюсь через:
if self._socket != None:
# Close out old socket first
self._socket.close()
self._socket = socket.socket(socket.AF_INET6, socket.SOCK_RAW)
self._socket.bind((self._interface,0))
self._socket.sendall(data)
где self._interface — мой локальный адрес; в частности, "fe80::fa1e:dfff:fed6:221d". При попытке это я получаю следующую ошибку:
File "raw.py", line 164, in connect
self._socket.bind((self._interface,0))
File "<string>", line 1, in bind
socket.error: [Errno 49] Can't assign requested address
Если я использую свой адрес локального хоста ipv6 для self._interface (":: 1"), я могу привязать адрес, но не могу ничего отправить:
self._socket.sendall(data)
File "<string>", line 1, in sendall
socket.error: [Errno 39] Destination address required
Зачем необработанному сокету нужен адрес назначения? Кто-нибудь работал с необработанными сокетами IPv6 в python и может помочь мне понять, почему это происходит?