c++ - 将套接字传递给子进程

标签 c++ visual-studio-2008

我的项目有两个程序: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 说了这么多:

Shared Sockets

The WSADuplicateSocket function is introduced to enable socket sharing across processes.

关于c++ - 将套接字传递给子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21025120/

相关文章:

c# - VS Express和专业有冲突吗?

c++ - 去除 OpenGL 橡皮筋伪影

c++ - 在纹理数组中绘制Texture2D图集

vb.net - 32 位和 64 位机器之间的错误图像格式异常

c++ - NMAKE : fatal error U1077: 'cd' :return code '0x2' cl. 可执行程序

visual-studio-2008 - 如何在没有 Nuget 的情况下安装 ServiceStack?

visual-studio-2008 - Multiproc 在 VS2008 中构建

c++ - 非静态函数作为 C++ 中另一个函数的参数

c++ - 使用字符串成员函数格式化 SSN

c++ - 跨另一个进程共享进程内 COM 对象