WSASocket对套接字重复的WSAEINVAL错误

时间:2010-08-19 02:53:18

标签: sockets duplication

我正在尝试将socket从一个进程不断地传输到另一个进程。我在主进程上使用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 );

1 个答案:

答案 0 :(得分:0)

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

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