Macos 如何断开用户空间与内核扩展的连接(在内核端)

Macos 如何断开用户空间与内核扩展的连接(在内核端),macos,kernel,kernel-extension,mach,Macos,Kernel,Kernel Extension,Mach,在我目前支持的内核扩展中,我使用套接字与用户空间通信。因此,我订阅了一些回调并正确地处理它们 reg.ctl_send = ctl_handle_send; reg.ctl_getopt = ctl_handle_getopt; reg.ctl_setopt = ctl_handle_setopt; reg.ctl_connect = ctl_handle_connect; reg.ctl_disconnect = ctl_handle_disconnect; 一切正常。只有一个问题-如果

在我目前支持的内核扩展中,我使用套接字与用户空间通信。因此,我订阅了一些回调并正确地处理它们

reg.ctl_send = ctl_handle_send; 
reg.ctl_getopt = ctl_handle_getopt;
reg.ctl_setopt = ctl_handle_setopt;

reg.ctl_connect = ctl_handle_connect;
reg.ctl_disconnect = ctl_handle_disconnect;
一切正常。只有一个问题-如果存在已连接的用户空间客户端,则无法卸载内核扩展。ctl_deregisterkctlref返回错误


有没有办法在内核扩展中重写它?我想断开与所有客户端的连接并成功注销自己

我不知道如何使用内核控制套接字来完成此操作。你需要向userspace发送一条消息,让userspace关闭套接字,我想。我尽量不依赖userspace,因为它可能会被卡住、破坏、无限循环或其他任何形式。你可以使用sock\u close关闭内核中的套接字。无论出于何种原因,苹果都不允许您访问内核控制套接字的底层套接字,而且似乎也没有用于关闭操作的包装器。如果要直接使用套接字KPI使用另一种类型的套接字PF_INET、PF_LOCAL等,您应该能够做到这一点。