gethostbyname을 비동기모드로 사용하는 방법
글쓴이: nekoko / 작성시간: 월, 2008/03/17 - 10:19오전
어플리케이션 메뉴에서 네트워크로 gethostbyname을 호출하는 부분이 있는데
대상 서버에 접근할 수 없거나 처리가 늦거나 하는 경우
프로그램이 처리가 끝날 때까지 멈추더라구요
그래서 찾아봤더니 동기 모드로 동작해서 그렇다는데
gethostbyname을 비동기화시키려면 어떤식으로 프로그래밍해야 하나요..?
fcntl이나 select를 쓰는것 같던데..
gethostbyname은 fd를 안쓰니까 어찌 해야할런지 잘모르겠습니다
Forums:
도메인 안쓰고
도메인 안쓰고 ip주소로 직접 connect()하면 되죠.
gethostbyname()은 도메인을 ip로 바꾸어 줍니다.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
가장 쉬운 방법은
가장 쉬운 방법은 /etc/nsswitch.conf 를 수정하면 block을 피할수 있을것 같네요.
gethostent 를 실행해서 찾는 방법도 비동기로 가능하지 않을까요 ?
^^*
gethostbyname을 별도
gethostbyname을 별도 쓰레드에서 호출하는 방법은 어떨까요?
쓰레드로 처리했습니다
프로그램의 다른 부분에서 gethostbyname을 사용하는 부분이 있어
살펴보니 그쪽은 윗분 말씀대로 쓰레드에서 처리하는 것 같더라구요
그래서 비슷하게 해봤더니 일단 처리지연때문에
먹통이 되는 현상은 피할 수 있었습니다
그런데 쓰레드에서 gethostbyname에 머물러 있을 때 그 쓰레드를 죽여버리니
gethostbyname이 리턴을 안하는 현상이 발생하더군요 (프로그램 정지;)
구글을 찾아보니 저랑 똑같은 현상에 대해 묻는 글이 있었습니다
gethostbyname은 쓰레드안전 함수가 아니라 함부로 강제 종료하면 안된다고
하네요
그래서 gethostbyname을 빠져나올때까지 기다리게 처리하라고 하던데..
그렇게 하면, gethostbyname 처리 지연 시간동안 메뉴를 이동하면서 쓰레드가 무지막지하게
생겨버릴 위험성이 또 생기더군요..
아무튼 그래서 처리 방식 자체를 다시 생각해보기로 하엿습니다
자문자답식의 글이 되어버렸지만 나중의 검색을 위해 적어봅니다
답변 주신 분들 고맙습니다
"I'm convinced that the only thing that kept me going was that I loved what I did." - Steve Jobs 1955-2011
댓글 달기