Я пытаюсь постоянно передавать сокет из одного процесса в другой. Я использую 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 );