Python3: 我们如何关闭 netlink 套接字阻塞 recv?

Python3: how can we close netlink socket blocking recv?

我在 Python 中有如下的原始套接字来接收来自 linux 内核的网络链接消息。

socket.socket(socket.AF_NETLINK, socket.SOCK_RAW, socket.NETLINK_ROUTE)

我正在阻塞这个套接字 recv 并想从另一个 Python 线程关闭它。但是,在此套接字 returns 上调用 shutdown(socket.SHUT_RD) 会出错 ([Errno95] Operation not supported)

这是为什么?我们如何关闭这个套接字?我正在使用 Python 3.7

没有提到这个行为 https://docs.python.org/3/library/socket.html#socket

说明如下:

Note close() releases the resource associated with a connection but does not necessarily close the connection immediately. If you want to close the connection in a timely fashion, call shutdown() before close().

If you want to close the connection in a timely fashion, call shutdown() before close()

此声明是关于已连接 个套接字的。 TCP 套接字已连接,但 UDP、Raw、Netlink 套接字等未连接。这就是此类套接字不支持 shutdown 的原因。请改用简单的 close