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
。
我在 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
。