首页 > 解决方案 > 在 dotnet (c#) 中使用 netlink 连接器?

问题描述

我正在编写一个 dotnet 核心应用程序,并希望使用 linux netlink 连接器提供的功能来侦听进程 fork 事件。

我不太确定这是否可以用 dotnet 编写,因为这是 C 中的 linux 内核代码。我应该使用 pinvoke 来调用 C 代码吗?事件将如何发送回我的 c# 处理程序?

标签: c#.net-core

解决方案


看起来您不能使用 dotnet 创建 netlink 连接器套接字。System.Net.Sockets 不支持底层协议族和地址族,并且尝试将类型转换为枚举类型也不起作用,套接字构造函数会抛出不受支持的地址族错误。

基本上,这行得通

#include <linux/connector.h>
#include <linux/netlink.h>
#include <sys/socket.h>

int main() {
    int sock = socket(16, SOCK_DGRAM, 11);
    return 0;
}

但这失败了

const UInt16 NETLINK_CONNECTOR = 11;
const UInt16 PF_NETLINK = 16;
Socket temp = new Socket((AddressFamily)PF_NETLINK, SocketType.Dgram, (ProtocolType)NETLINK_CONNECTOR);

扔一个

未处理的异常:System.Net.Sockets.SocketException:协议不支持地址族

这是跟踪此功能的 corefx 存储库上的 github 问题 - https://github.com/dotnet/corefx/issues/34015


推荐阅读