2013-07-09 1 views
2

GetQueuedCompletionStatus가 ERROR_INVALID_NETNAME으로 실패합니다. 이것은 무엇을 의미 하는가? 나는 MSDN에서 보았습니다.GetQueuedCompletionStatus가 반환 된 후 오류가 발생합니다. 오류 번호는 ERROR_INVALID_NETNAME입니다.

첫 단계 : ConnectEx을 사용하여 서버에 연결하십시오. ConnectEx 오류 코드 997 (ERROR_IO_PENDING)와 함께 성공하십시오 ConnectEx 호출 완료 후

DWORD bytes = 0; 
sockaddr_in addr = {0}; 
iocp_data_t * iocp = (iocp_data_t *)module->data; 

addr.sin_addr.s_addr = ip; 
addr.sin_family = AF_INET; 
addr.sin_port = htons(port); 

if(!iocp->tcp_connectex(event->fd, (const sockaddr*)&addr, sizeof(sockaddr_in), 
         NULL, 0, NULL, &event->connect.overlap)) 
{ 
    if(!ERR_RW_RETRIABLE(socket_geterror(event->fd))) 
    { 
     return false; 
    } 
} 

return true; 

GetQueuedCompletionStatus 반환하지만 오류 코드 1214 (ERROR_INVALID_NETNAME)로 :

fd_event_t * fd_event; 
iocp_data_t * iocp = (iocp_data_t *)module->data; 

rc = GetQueuedCompletionStatus(iocp->iocp, &bytes, (PULONG_PTR)&fd_event, 
           (LPOVERLAPPED *) &event, (u_long) 1); 
if(event == NULL) 
{ 
    return; 
} 
DWORD err = GetLastError(); // err = 1214 
event = containing_record(event,event_t,overlap); 
if(event->in_used) 
{ 
    if(event->event_handler != NULL) 
    { 
     event->event_handler(module,fd_event,event->type,event->user); 
    } 
    iocp_add_event(module,fd_event,event->type,event->event_handler,event->user); 
} 
+0

AFAIK'ERROR_INVALID_NETNAME'은 (는) GetQueuedCompletionStatus()가보고 할 수있는 오류 코드가 아닙니다. 실제 사례를 보여주십시오. –

답변

0

몇 가지 확인 :

  • ip은 어디에서 왔습니까? htonl을 사용해야 할 수도 있습니다.

  • 소켓은 어떻게 생성됩니까? 특정 소켓이 IPv4 주소 (예 : IPv6 소켓)를 처리하지 못할 수도 있습니다.

또한, GetLastError를 호출하기 전에 반드시 GetQueuedCompletionStatus 반환 FALSE합니다. TRUE의

  • 반환 값 : GetQueuedCompletionStatus 세 가지 가능한 결과 갖는다

    완료 패킷을 성공적 대기열, 및 I/O는 성공적으로 완료. NULL로 설정된 OVERLAPPED FALSE의

  • 반환 값 :

    GetQueuedCompletionStatus 자체는 (예를 들어 타임 아웃)를 완성 디큐 못했다. 중복되지 NULL로 FALSE의

  • 반환 값 :

    완료 패킷을 대기열하지만 나는/O 그것은 실패 나타냅니다.

관련 문제