簡體   English   中英

嘗試綁定到套接字時出現“OSError: [Errno 22] Invalid argument”錯誤

[英]“OSError: [Errno 22] Invalid argument” error when trying to bind to a socket

broadcaster = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
broadcaster.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
broadcaster.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

def send_broadcast_thread():
    msg = "test"
    while True:
        # TODO: write logic for sending broadcasts.
        broadcaster.sendto(msg.encode(), ('255.255.255.255', get_broadcast_port()))
        print(msg.encode())
        time.sleep(1)

def receive_broadcast_thread():
    broadcaster.bind(('', get_broadcast_port()))
    while True:
        data, (ip, port) = broadcaster.recvfrom(4096)
        print(f"RECV: {data} FROM: T{ip}:{port}")

當我嘗試運行此代碼時出現此錯誤。 我在一個單獨的守護線程中調用它們中的每個 function。

line 88, in receive_broadcast_thread
    broadcaster.bind(('', get_broadcast_port())) OSError: [Errno 22] Invalid argument

從外觀上看,您在receive_broadcast_thread() function 的第二行提供了無效的主機名(空字符串)。

AFAICT,您最多可以bind一個套接字。 例如,Linux手冊頁說:

EINVAL套接字已經綁定到一個地址。

EINVAL錯誤號定義為:

#define EINVAL          22      /* Invalid argument */

這似乎與你得到的相符。

為了解決您的問題,我會嘗試將bind移出receive_broadcast_thread到您設置所有套接字選項的位置之后

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM