• <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>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            inet_ntop(), inet_pton()

            Posted on 2011-01-04 22:41 S.l.e!ep.¢% 閱讀(1963) 評論(0)  編輯 收藏 引用 所屬分類: Unix

            inet_ntop(), inet_pton()

            Linux/uClinux 2008-11-18 14:50:06 閱讀463 評論0 ??字號: ? 訂閱

            Convert IP addresses to human-readable form and back.

            Prototypes

            #include <arpa/inet.h>
            
            const char *inet_ntop(int af, const void *src,
                                  char *dst, socklen_t size);
            
            int inet_pton(int af, const char *src, void *dst);

            Description

            These functions are for dealing with human-readable IP addresses and converting them to their binary representation for use with various functions and system calls. The "n" stands for "network", and "p" for "presentation". Or "text presentation". But you can think of it as "printable". "ntop" is "network to printable". See?

            Sometimes you don't want to look at a pile of binary numbers when looking at an IP address. You want it in a nice printable form, like 192.0.2.180, or 2001:db8:8714:3a90::12. In that case, inet_ntop() is for you.

            inet_ntop() takes the address family in the af parameter (either AF_INET or AF_INET6). The src parameter should be a pointer to either a struct in_addr or struct in6_addr containing the address you wish to convert to a string. Finally dst and size are the pointer to the destination string and the maximum length of that string.

            What should the maximum length of the dst string be? What is the maximum length for IPv4 and IPv6 addresses? Fortunately there are a couple of macros to help you out. The maximum lengths are: INET_ADDRSTRLEN and INET6_ADDRSTRLEN.

            Other times, you might have a string containing an IP address in readable form, and you want to pack it into a struct sockaddr_in or a struct sockaddr_in6. In that case, the opposite funcion inet_pton() is what you're after.

            inet_pton() also takes an address family (either AF_INET or AF_INET6) in the af parameter. The src parameter is a pointer to a string containing the IP address in printable form. Lastly the dst parameter points to where the result should be stored, which is probably a struct in_addr or struct in6_addr.

            These functions don't do DNS lookups—you'll need getaddinfo() for that.

            Return Value

            inet_ntop() returns the dst parameter on success, or NULL on failure (and errno is set).

            inet_pton() returns 1 on success. It returns -1 if there was an error (errno is set), or 0 if the input isn't a valid IP address.

            Example

            // IPv4 demo of inet_ntop() and inet_pton()
            
            struct sockaddr_in sa;
            char str[INET_ADDRSTRLEN];
            
            // store this IP address in sa:
            inet_pton(AF_INET, "192.0.2.33", &(sa.sin_addr));
            
            // now get it back and print it
            inet_ntop(AF_INET, &(sa.sin_addr), str, INET_ADDRSTRLEN);
            
            printf("%s\n", str); // prints "192.0.2.33"
            // IPv6 demo of inet_ntop() and inet_pton()
            // (basically the same except with a bunch of 6s thrown around)
            
            struct sockaddr_in6 sa;
            char str[INET6_ADDRSTRLEN];
            
            // store this IP address in sa:
            inet_pton(AF_INET6, "2001:db8:8714:3a90::12", &(sa.sin6_addr));
            
            // now get it back and print it
            inet_ntop(AF_INET6, &(sa.sin6_addr), str, INET6_ADDRSTRLEN);
            
            printf("%s\n", str); // prints "2001:db8:8714:3a90::12"
            // Helper function you can use:
            
            //Convert a struct sockaddr address to a string, IPv4 and IPv6:
            
            char *get_ip_str(const struct sockaddr *sa, char *s, size_t maxlen)
            {
                switch(sa->sa_family) {
                    case AF_INET:
                        inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr),
                                s, maxlen);
                        break;
            
                    case AF_INET6:
                        inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr),
                                s, maxlen);
                        break;
            
                    default:
                        strncpy(s, "Unknown AF", maxlen);
                        return NULL;
                }
            
                return s;
            }
            伊人久久大香线蕉精品不卡| 97r久久精品国产99国产精| 久久精品18| 色播久久人人爽人人爽人人片AV| 亚洲va中文字幕无码久久| 久久国产精品国产自线拍免费| 久久亚洲精品无码播放| 亚洲女久久久噜噜噜熟女| 国产精品美女久久久网AV| 国内精品综合久久久40p| 国产精品成人久久久久久久| 亚洲va中文字幕无码久久不卡| 人人狠狠综合久久亚洲88| 亚洲国产精品18久久久久久| 久久久久久国产精品免费免费| 国产精品99久久99久久久| 久久天天躁夜夜躁狠狠躁2022 | 久久久久久综合网天天| 精品午夜久久福利大片| 久久久亚洲欧洲日产国码二区| 无码人妻少妇久久中文字幕| 一级做a爱片久久毛片| 久久久噜噜噜久久熟女AA片| 国产精品久久久久久久人人看| 久久av高潮av无码av喷吹| 精品久久久久久综合日本| 成人久久久观看免费毛片| 无码久久精品国产亚洲Av影片 | 亚洲欧美久久久久9999| 青草影院天堂男人久久| 欧美精品一本久久男人的天堂 | 亚洲人成电影网站久久| 久久国产午夜精品一区二区三区| 中文精品久久久久国产网址 | 久久强奷乱码老熟女网站| 亚洲综合精品香蕉久久网97| 99久久综合狠狠综合久久止| 俺来也俺去啦久久综合网| 一本一道久久精品综合| 久久精品成人欧美大片| 久久久精品国产|