python socket取消设置选项而不破坏场景

时间:2019-07-11 06:33:03

标签: python sockets networking

我有一堆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。 (由于UDP)。像这样:

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 个答案:

答案 0 :(得分:2)

是的,就像这样:

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

(尽管我不确定您是否真的需要这样做才能恢复发送到非广播地址,我认为 SO_BROADCAST不会妨碍您。 )