2016-09-29 1 views
0

내 C++ 코드에서 Socket.io 0.9 서버 (기존 호환성을 위해)로 연결해야합니다. socket.io-poco은이 기능을 제공하는 유일한 라이브러리처럼 보입니다. 따라서 나는 뛰어 들었고 그걸 지원하기 위해 Poco을 가져 왔습니다. 그들이하지 않을 때까지 대부분 일을합니다.Poco C++ 라이브러리 내에서 호출을 보내고 얼마 동안 실행 한 후에 Windows에서 돌아 오지 않습니다.

내 프로세스가 send call에서 멈춘 것 같습니다. SocketImpl.cpp 내부의 호출은 반환되지 않지만 해당 상태가되기까지 약 30 분의 연결 해제 된 실행이 필요합니다. 나는 나쁜 상태로 들어가는 프로그램을 예방하고/또는 복구하는 방법을 잘 모릅니다.

프로그램은 Windows 2012 R2에서 실행됩니다. 서버에 연결하여 성공적으로 대화하지만 연결이 일시적으로 변할 수 있습니다. 다시 돌아올 것이고 때로는 서비스가 서버에 보이지 않을 것입니다. 이 작업은 몇 시간 또는 며칠이 걸릴 수 있습니다. 내 테스트 시나리오는 서버를 인위적으로 연결 해제하고 어떤 일이 발생 하는지를 보여줍니다. 이는 일반적으로 프로그램이 약 30 분 내에 다시 돌아 가지 않는 상태가되는 결과를 낳습니다.

이 문제를 완화하거나 해결하는 방법에 대한 아이디어가 있으십니까?

  • 다른 C++ Socket.io 말하기의 라이브러리에있는 나는 오래된 socket.io-마시고 코드를 할 수있는 0.9
  • 뭔가 더 방어 만들기 위해
  • 추측으로에 관해서는 내가 나의 그 사이의 층들이 엉망이 되었습니까?
  • 다른 아이디어?

답변

0

나는 Winsock에 대해 더 알 필요가 있다고 결정 했으므로 a guide을 찾았습니다. 그게 SO_SNDTIMEOsetsockopt으로 설정하라고했습니다. SocketImpl.html을 통해 검색 한 후 setSendTimeout을 찾았고 WebSocket을 사용하여 socket.io-poco 호출에서 호출 할 수 있음을 알았습니다. 이 답변이 도움이된다거나 아무도 다른 사람이없는 것을 : 나는 희망 할 모르는

void SIOClientImpl::reconnect() { 
    // Disconnect 
    _heartbeatTimer->stop(); 
    _ws->close(); 
    // Connect 
    if((handshake(_queryArgs)) && (openSocket())) { 
      connectToEndpoint(_uri.getPath()); 
    } else { 
     Poco::Thread::sleep(100); 
    } 
} 

: 타임 아웃이 발생했을 때

나는 그럼 그냥 새로운 reconnect 기능을 예외를 catch하고 전화를했다 시도하고 이것을해라!