gethostbyname을 비동기모드로 사용하는 방법

nekoko의 이미지

어플리케이션 메뉴에서 네트워크로 gethostbyname을 호출하는 부분이 있는데
대상 서버에 접근할 수 없거나 처리가 늦거나 하는 경우
프로그램이 처리가 끝날 때까지 멈추더라구요
그래서 찾아봤더니 동기 모드로 동작해서 그렇다는데
gethostbyname을 비동기화시키려면 어떤식으로 프로그래밍해야 하나요..?
fcntl이나 select를 쓰는것 같던데..
gethostbyname은 fd를 안쓰니까 어찌 해야할런지 잘모르겠습니다

Necromancer의 이미지

도메인 안쓰고 ip주소로 직접 connect()하면 되죠.

gethostbyname()은 도메인을 ip로 바꾸어 줍니다.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

albamc의 이미지

가장 쉬운 방법은 /etc/nsswitch.conf 를 수정하면 block을 피할수 있을것 같네요.

gethostent 를 실행해서 찾는 방법도 비동기로 가능하지 않을까요 ?

^^*

kewlbear의 이미지

gethostbyname을 별도 쓰레드에서 호출하는 방법은 어떨까요?

nekoko의 이미지

프로그램의 다른 부분에서 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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.