2010-08-19 22 views
0

我试图将套接字从一个进程不断地转移到另一个进程。我在主进程上使用WSADuplicateSocket总是可以正常工作。然后我在子进程上调用WSASocket。不过,我偶尔会从WSASocket获取WSAEINVAL错误。来自WSASocket的WSAEINVAL错误在套接字重复上

我检查lpWsaProtocolInfo参数,它总是很好。所以我真的不知道这个错误是如何发生的?

站长:

int err = WSADuplicateSocket(sockFd, childPID, 
         (LPWSAPROTOCOL_INFO)sockInfo); 

儿童:

LPWSAPROTOCOL_INFO lpWsaProtocolInfo = 
    (LPWSAPROTOCOL_INFO)malloc(sizeof(*lpWsaProtocolInfo)); 

memcpy(lpWsaProtocolInfo, sockInfo, sizeof(*lpWsaProtocolInfo)); 

sockFd = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, lpWsaProtocolInfo, 
        0, 0); 
+0

什么是总体情况?你可以发布你调用WSASocket的客户端代码吗? – obelix 2010-08-19 02:56:12

回答

0

检查孩子过程的访问权限。确保在您对CreateProcess的调用中bInheritHandles为true。

我在dwCreationFlags中使用CREATE_PRESERVE_CODE_AUTHZ_LEVEL,它适用于我。