Использование многоадресного сокета в Ad-hoc сети: [Errno 19] Нет такого устройства
Я хочу создать многоадресное сокетное соединение в одноранговой сетевой топологии. У меня есть клиент / серверная реализация на python, которая работает нормально в обычной конфигурации сети, то есть стандартная конфигурация сети с подключением к Интернету.
Это код для клиентского соединителя "подписчик":
if __name__ == "__main__":
multicast_group = '224.0.0.1'
server_address = ('', 10000)
# Create the socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Bind to the server address
sock.bind(server_address)
# Tell the operating system to add the socket to the multicast group
# on all interfaces.
group = socket.inet_aton(multicast_group)
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
В обычной сети, подключенной к Интернету, это работает нормально, но в топологии специальной сети это приводит к ошибке:
Файл "main.py" строка 33
setsockopt (socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
Файл "usr/lib/python2.7/socket.py", строка 228, в мет
вернуть getattr(self.__sock, name)(* аргументы)
socket.error: [Ошибка 19] Нет такого устройства
Есть идеи, что происходит?
Спасибо
1 ответ
Рабочим решением является ручная настройка сетевого интерфейса для использования сокета:
sock.setsockopt(socket.SOL_SOCKET, 25, 'bat0')
И добавьте членство в группу и имя хоста:
group = socket.inet_aton(multicast_group)
intf = socket.gethostbyname(socket.gethostname())
sock.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP, group + socket.inet_aton(intf))