сокет питона, отменяющий параметр без разрушения скокета - PullRequest
1 голос
/ 11 июля 2019

У меня есть несколько IP-адресов и отправка им UDP-сообщения.

for ip in transmit_ip:
    socket = socket.socket(socket.INET, socket.SOCK_DGRAM)
    if ip.endswith(".255"):
        socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
    socket.sendto(message, (ip, transmit_port))
    socket.close()

Я хотел создать один сокет и отправить на все IP-адреса через этот сокет.(С УДП).Вот так:

socket = socket.socket(socket.INET, socket.SOCK_DGRAM)
for ip in transmit_ip:
    if ip.endswith(".255"):
        socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
    socket.sendto(message, (ip, transmit_port))
socket.close()

Но дело в том, что после получения широковещательного адреса для сокета будет установлена ​​опция socket.SO_BROADCAST.

В первом случае мы закрываем и воссоздаемсокет для каждого IP-адреса, поэтому он не будет влиять на другие IP-адреса.

Есть ли способ отменить параметры сокета?

1 Ответ

2 голосов
/ 11 июля 2019

Да, вот так:

socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 0)

(хотя я не уверен, что вам на самом деле нужно это сделать, чтобы возобновить отправку по не вещательным адресам - я думаю SO_BROADCAST не помешает этому.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...