• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統計

            最新評論

            gethostbyname timeout --- 轉

            總結: 下面第一種方法經過測試是可行的,第二種方法(多線程中使用)不能夠用信號中斷。

            so , 對信號的使用要非常小心。



            gethostbyname 是阻塞的, 非線程安全的,所以最好使用getaddrinfo , 它是線程安全的。

            要給gethostbyname 設置一個超時值, 用信號(alarm)實現是不行的(目前項目嵌入式平臺上面測試不行) 。


            下面是網上摘錄的解決該問題的方法, 對怎么繞過其他系統函數(無論是線程安全還是非安全的)也有很好的借鑒意義


            Hello,

            I need to add timeout to gethostbyname function in my program. I
            googled and searched archives, found some examples with alert(), but
            can't make it work :/ I would be grateful of someone could tell me how
            to do it.

            You can't. Or rather, you shouldn't.

            The trick with alarm(2) (not alert()), is to longjmp(3) from the signal
            handler to a context created with setjmp(3) before calling gethostbyname(3).
            This is, unfortunately, very common in Perl code (in Perl die() actually
            uses longjmp() internally to a context set from an eval statement).

            However, gethostbyname() keeps internal state, and afterward its unsafe
            to call the function again. gethostbyname_r() might be relatively safer,
            but you've probably also leaked a file descriptor and memory,
            meaning you could only do it so many times from a single process before it
            won't work anymore. (And from a strict C perspective, jumping from the
            signal handler itself is questionable.)

            You do have options.

            1) Multiple processes. Use child processes and the
            gethostbyname()+alarm() trick, and return the answer down a pipe to
            the parent. The child will just kill itself if it timeouts (or
            alternatively the parent will set the alarm and kill the child), since it
            cannot reliably do it's job afterward.

            2) Use threads in conjunction with gethostbyname_r(), or preferably
            getaddrinfo(3). Still, you cannot interrupt these functions within the
            thread, and so you have a few more decisions to make in terms of how you
            handle timeouts.

            3) Use a third-party asynchronous DNS library: ADNS, C-Ares and UDNS are
            the first ones which comes to mind, the former two probably being the most
            popular.

            posted on 2012-11-12 14:45 大龍 閱讀(3285) 評論(0)  編輯 收藏 引用

            久久久久国色AV免费观看| 亚洲精品乱码久久久久久蜜桃图片| 久久青青草原精品国产| 久久午夜电影网| 日韩久久久久中文字幕人妻| 色狠狠久久AV五月综合| 国产精久久一区二区三区| 午夜视频久久久久一区 | 久久久中文字幕日本| 中文字幕无码av激情不卡久久| 亚洲人成伊人成综合网久久久| 热99re久久国超精品首页| 久久丫忘忧草产品| 久久久久国色AV免费观看| 久久777国产线看观看精品| 久久综合鬼色88久久精品综合自在自线噜噜 | 久久婷婷久久一区二区三区| 97视频久久久| 久久婷婷色综合一区二区| 韩国三级大全久久网站| 国产成人精品久久| 国产精品久久久久久久久软件| 99久久伊人精品综合观看| 99精品国产在热久久| 77777亚洲午夜久久多人| 欧美久久综合九色综合| 国产精品青草久久久久福利99| 国产精品岛国久久久久| 国产情侣久久久久aⅴ免费| 午夜天堂精品久久久久| 国产99久久久国产精品小说| 手机看片久久高清国产日韩| 久久久精品视频免费观看| 国产精品99久久久久久董美香| 精品国产一区二区三区久久久狼| 亚洲精品无码久久千人斩| 久久精品青青草原伊人| 亚洲AV日韩AV天堂久久| 无码AV中文字幕久久专区| 国产精品99精品久久免费| 国产产无码乱码精品久久鸭|