我正在尝试将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 );
答案 0 :(得分:0)
检查子进程的访问权限。在调用CreateProcess时确保bInheritHandles为真。
我在dwCreationFlags中使用CREATE_PRESERVE_CODE_AUTHZ_LEVEL,它对我有用。