UDP 套接字可以挂在 Python 中的“连接”上吗

问题描述 投票:0回答:1

假设我在Python中有这个程序“连接”一个UDP套接字:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.connect(('8.8.8.8', 53))

连接的调用会挂起吗?所以最好设置一个超时?所以类似:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(2)
sock.connect(('8.8.8.8', 53))

如果是这样,为什么?我本以为使用 UDP 时连接不会连接任何东西,更糟糕的是它会因某种原因立即失败,而不是挂起。

这是参考我写的异步Python DNS解析器中报告的错误:https://github.com/michalc/aiodnsresolver/pull/35哪里does似乎在连接时挂起,但我不知道为什么。

python sockets dns udp python-asyncio
1个回答
0
投票

不,因为它实际上并没有“连接”到任何东西。毕竟,UDP 是无连接的。在 UDP 套接字上调用

connect()
只会创建与对等端 IP/端口的静态关联,因此套接字上的后续发送/接收将仅与该对等端通信。

© www.soinside.com 2019 - 2024. All rights reserved.