원래 문제에 대한 해결책을 찾지 못했기 때문에 약간의 해결 방법을 시도했습니다. 나는 단순히 내 TCP 소켓의 connect()
호출에 대한 타임 아웃을 설정하려하고있다.Alarm()으로 연결 시간 제한
- 나는
connect()
을 블로킹하고 싶지만 보통 75 초가지기 전까지는 내 자신을 정의하고 싶습니다. - 나는 이미 타임 아웃을 위해 일했던
select()
을 시도했지만 연결을 얻을 수 없었다. (이것은 초기 문제인 here으로 묘사되었다). 다만 차단connect()
전화를 할 수 있지만,이 같은 알람을 중단 : 이것은이다signal(SIGALRM, connect_alarm); int secs = 5; alarm(secs); if (connect(m_Socket, (struct sockaddr *)&addr, sizeof(addr)) < 0) { if (errno == EINTR) { debug_printf("Timeout"); m_connectionStatus = STATUS_CLOSED; return ERR_TIMEOUT; } else { debug_printf("Other Err"); m_connectionStatus = STATUS_CLOSED; return ERR_NET_SOCKET; } }
static void connect_alarm(int signo) { debug_printf("SignalHandler"); return; }
와
그래서 지금은 그것을 다루는 또 다른 방법을 찾아 솔루션 난 stackoverflow에 스레드 here에서 인터넷에서 발견. 이 코드를 사용하면 프로그램이 타이머를 시작한 다음 connect()
호출로갑니다. 5 초 후 (콘솔에서 볼 수 있듯이) 신호 처리기가 실행되었지만 그 후 프로그램은 여전히 connect()
함수 내에 75 초 동안 남아 있습니다. 사실 모든 설명은 connect_alarm()
이 connect()
기능을 중단해야한다고 말하지만 내 경우에는 그렇지 않습니다. 내 문제에 대해 원하는 결과를 얻을 수있는 방법이 있습니까?
1 주일 후에 문제가 해결되었습니다 ... – Nirav
sigaction으로 구현 했습니까? – ernesto