我的项目有两个程序:Parent 和 Child。
在父类中:有一个套接字等待来自客户端的连接。当Parent接受连接时,它生成Child进程并将socket传递给Child。
SOCKET newSock = accept(listenSock, 0, 0);
char cmd[1024];
sprintf(cmd, "%s %d", "Child.exe", newSock);
result = CreateProcess( NULL, cmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInformation);
Client 和 Child 进程传输数据成功。
但是当我在 Google 上搜索时,有些人写道:必须调用函数 WSADuplicateSocket(),然后将套接字传递给子进程。
请帮我展示一下这两种方式的区别? 如果我不调用 WSADuplicateSocket() 是否我的程序有任何错误?
最佳答案
好吧,对于初学者来说,Windows 上的 SOCKET
是句柄(即指针),因此受 32/64 位字节大小的限制,所以 %d
如果您的应用程序在 64 位系统上运行,则这是不够的。您必须改用 %p
。
除此之外,WSADuplicateSocket()
是正确的方法。 MSDN 说了这么多:
The WSADuplicateSocket function is introduced to enable socket sharing across processes.
关于c++ - 将套接字传递给子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21025120/