2010-08-19 2 views
0

한 프로세스에서 다른 프로세스로 소켓을 지속적으로 전송하려고합니다. 항상 잘 작동하는 마스터 프로세스에서 WSADuplicateSocket을 사용하고 있습니다. 그런 다음 하위 프로세스에서 WSASocket을 호출합니다. 그러나, 한 번 WSASocket에서 WSAEINVAL 오류가 발생합니다.WSAEINVAL 소켓 복제시 WSAocket 오류

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

전체 시나리오는 무엇입니까? WSASocket을 호출하는 클라이언트 코드를 게시 할 수 있습니까? – obelix

답변

0

확인 자식 프로세스의 액세스 권한. CreateProcess 호출시 bInheritHandles가 true인지 확인하십시오.

dwCreationFlags에서 CREATE_PRESERVE_CODE_AUTHZ_LEVEL을 (를) 사용하며 저에게 적합합니다.