0

与unix相比,我一直试图掌握句柄继承和应用程序内存在windows上共享的想法。

由于 windows 不提供 fork() 或任何类似的东西,我一直在阅读 createprocess 和句柄。

我仍然无法理解新进程如何读取从他们的父母那里传递给他们的句柄。我查看了 msdn 文档,似乎 ReadFile 是这里的答案,但不确定如何阅读它。

我想要做的是客户端/服务器,服务器通过套接字传递。我正在使用 Winsock1,所以 WSAduplicate 不是一个选项。我读到套接字不能被传递,但它们可以被复制。( http://tangentsoft.net/wskfaq/articles/passing-sockets.html )

长话短说,假设我将句柄值(例如 0x0000070)作为命令行参数传递,我如何将其转换为有效的句柄(即套接字)。

干杯,

**更新我知道这种方法并不理想,线程是解决这个问题的更好方法。但是我们已经明确要求创建子进程而不是线程。

4

2 回答 2

0

继承句柄的整数值与它在父进程中的值相同。所以你所做的就是将整数转换为句柄:

HANDLE h = (HANDLE) handle_value;
于 2013-09-13T04:53:25.950 回答
0

根据应用程序的确切性质,典型的设计是在一个进程中使用多个线程。然后像 a 这样的项目socket可以存储在全局中或传递套接字的地址,而不必担心继承问题。

请记住,服务器通常作为单独的进程运行,并且服务器代码通常与客户端代码完全不同。

最后,冒着被否决的风险,分叉没有什么特别之处。实际上,创建第二个过程是一种低档的方式。如果您阅读分叉模块的代码,它看起来很奇怪!

于 2013-09-11T21:10:31.843 回答