我可以在 Winsock 2 P/Invoke 调用和 C# System.Net.Sockets 调用之间共享套接字吗?
我希望能够在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
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.