我可以在 Winsock 2 P/Invoke 调用和 C# System.Net.Sockets 调用之间共享套接字吗?

发布于 2024-12-01 14:05:03 字数 401 浏览 1 评论 0原文

我希望能够在 C# 中创建一个套接字,并将其编组到需要一个 winsock 2 套接字的 C 函数(反之亦然),允许 C 库使用该套接字进行通信,一旦完成,再次使用该套接字C# 托管上下文来完成实际工作。

C 库是 win32 kerberos 实现,假设有一个 Winsock socket/fd。我希望能够使用 krb5_recvauth() 函数来执行所有身份验证,但不必使用包装的 win32 调用来编写整个服务器。

在服务器中使用全 C 或全 C++ 不是一种选择;由于不相关的原因,C# 是不可避免的。使用替代的 kerberos 实现是一种选择,但它必须能够与普通 C kerberos 库通信。在服务器上使用两个端口,一个用于路边,一个用于 C# 是一种选择,但这感觉像是一种黑客行为,而且很难保证安全。

I would like to be able to create a socket in C# and marshal it to a C function that expects a winsock 2 socket (or vice versa), allow the C library to use that socket to communicate and once it's done use the socket again in the C# managed context to do the actual work.

The C library is the win32 kerberos implementation that assumes a winsock socket/fd. I would like to be able to use the krb5_recvauth() function to perform all the authentication but not have to write the entire server using wrapped win32 calls.

Using all-C or all-C++ in the server is not an option; C# is unavoidable for unrelated reasons. Using an alternative kerberos implementation is an option but it must be able to speak to the vanilla C kerberos library. Using two ports on the server, one for kerb and one for C# is an option but that feels like a hack and a hard-to-secure one at that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

素罗衫 2024-12-08 14:05:03

Socket.Handle 属性应表示Winsock 级套接字句柄。尝试将此指针传递给您的 P/Invoke 调用。

The Socket.Handle property should represent the Winsock-level socket handle. Try passing this pointer to your P/Invoke calls.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文