![](/img/trans.png)
[英]OSError: [Errno 22] Invalid argument: when trying plt.savefig
[英]“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.