0

我正在尝试不断地将套接字从一个进程转移到另一个进程。我在主进程上使用 WSADuplicateSocket ,它总是可以正常工作。然后我在子进程上调用 WSASocket。但是,我偶尔会从 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 );
4

1 回答 1

0

检查子进程的访问权限。确保在调用 CreateProcess 时 bInheritHandles 为真。

我在 dwCreationFlags 中使用 CREATE_PRESERVE_CODE_AUTHZ_LEVEL,它对我有用。

于 2011-04-14T21:50:08.087 回答