Ошибка WSAEINVAL от WSASocket при дублировании сокета - PullRequest
0 голосов
/ 19 августа 2010

Я пытаюсь постоянно передавать сокет из одного процесса в другой. Я использую WSADuplicateSocket на мастер-процесс, который всегда работает нормально. Затем я вызываю WSASocket для дочернего процесса. Однако время от времени я получаю сообщение об ошибке WSAEINVAL от WSASocket.

Я проверяю параметр lpWsaProtocolInfo, и это всегда хорошо. Так я действительно понятия не имею, как эта ошибка может произойти?

Master:

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 голосов
/ 15 апреля 2011

Проверьте права доступа дочернего процесса.Убедитесь, что bInheritHandles истинно при вызове CreateProcess.

Я использую CREATE_PRESERVE_CODE_AUTHZ_LEVEL в dwCreationFlags, и он работает для меня.

...