Использование многоадресного сокета в 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))
Другие вопросы по тегам