원격 호스트에 소켓 연결을 유지하려고 시도하는 pthread
을 생성하는 코드가 있습니다. 연결이 끊어지면 소켓의 블로킹 connect()
호출을 사용하여 다시 연결을 시도합니다. 코드가 별도의 스레드에서 실행되기 때문에 동기 소켓 API를 사용한다는 사실에 대해서는별로 신경 쓰지 않습니다.차단 소켓 연결을 수행하는 스레드를 인터럽트하는 방법은 무엇입니까?
즉, 내 응용 프로그램을 종료 할 때까지입니다. 질서 정한 종료의 모습을하고 싶습니다. 그래서 스레드 동기화 프리 머 티브를 사용하여 스레드를 깨우고 종료 신호를 보내고 스레드가 완료 될 때까지 기다리는 pthread_join()
을 수행하십시오. 이것은 종료 명령을 내릴 때 스레드가 connect()
호출 중간에 있지 않는 한 위대한 기능입니다. 이 경우 연결 시간이 초과 될 때까지 기다려야하는데 시간이 오래 걸릴 수 있습니다. 이로 인해 응용 프로그램이 종료되는 데 오랜 시간이 걸리는 것처럼 보입니다.
내가 무엇을하고 싶은지 어떤 식 으로든 connect()
에 대한 호출을 중단하는 것입니다. 호출이 돌아 오면 스레드는 내 종료 신호를 알아 차리고 정상적으로 종료합니다. connect()
은 시스템 호출이기 때문에 의도적으로 신호를 사용하여 인터럽트를 할 수 있다고 생각했기 때문에 (이 경우 호출은 EINTR
을 반환합니다) POSIX 스레드 환경에서 강력한 방법인지는 확실하지 않습니다.
누군가 신호를 사용하거나 다른 방법을 사용하여이를 수행하는 방법에 대한 권장 사항이 있습니까? 참고로, 수정할 수없는 일부 라이브러리 코드에서는 connect()
호출이 중단되므로 비 블로킹 소켓으로 변경하는 것은 옵션이 아닙니다.
언어 태그도 붙여주세요. – Tudor
저는 실제로 파이썬으로 글을 쓰고 있습니다 만, 나는 언어에 구애받지 않는 어떤 것도 찾고 있지 않습니다. 내가 리눅스에서 작동한다고 가정 할 수 있습니다. –
소켓을 닫습니다. –