我正在编写一个dotnet核心应用程序,并希望使用linux netlink connector提供的功能来监听进程派生事件。
我不太确定是否可以用dotnet编写,因为这是C语言中的Linux内核代码。我应该使用pinvoke调用C代码吗?事件将如何发送回我的C#处理程序?
答案 0 :(得分:0)
看起来您无法使用dotnet创建netlink连接器套接字。 System.Net.Sockets不支持基础协议族和地址族,并且尝试将类型转换为int的枚举都不起作用,因为套接字构造函数会抛出不受支持的地址族错误。
基本上,这可行
#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