2010-08-19 3 views
0

Je suis en train de transférer le socket d'un processus à l'autre en permanence. J'utilise WSADuplicateSocket sur le processus maître qui fonctionne toujours très bien. Ensuite, j'appelle WSASocket sur le processus fils. Cependant, je reçois une erreur WSAEINVAL de WSASocket de temps en temps. Je vérifie le paramètre lpWsaProtocolInfo et c'est toujours bon. Donc, je n'ai vraiment aucune idée de comment cette erreur pourrait se produire?WSAEINVAL erreur de WSASocket sur la duplication de socket

Master:

int err = WSADuplicateSocket(sockFd, childPID, 
         (LPWSAPROTOCOL_INFO)sockInfo); 

enfant:

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

quel est le scénario global? Pourriez-vous poster le code pour le client où vous appelez WSASocket? – obelix

Répondre

0

Vérifiez les droits d'accès du processus de l'enfant. Assurez-vous que bInheritHandles est vrai lors de votre appel à CreateProcess.

J'utilise CREATE_PRESERVE_CODE_AUTHZ_LEVEL dans dwCreationFlags, et cela fonctionne pour moi.