zoukankan      html  css  js  c++  java
  • Linux socket 地址及常用函数

    IPv4套接字地址结构:

    #include <netinet/in.h>
    struct in_addr
    {
         in_addr_t    s_addr;              /*32-bit,network byte orderd*/
    };
    struct sockaddr_in
    {
       uint8           sin_len;
       sa_family_t     sin_family;         /*AF_INET*/
       in_port_t       sin_port;           /*16-bit,network byte ordered*/
       struct in_addr  sin_addr;
       char            sin_zero[8];
    };

    s_addr可以为宏 INADDR_ANY



    地址转换函数:

    #include <netinet/in.h>
    int inet_aton(const char *strptr, struct in_addr *addrptr);
    
    char *inet_ntoa(struct in_addr inaddr);

    inet_aton将strptr所指的C字符串转换成一个32位的网络字节序二进制值,并通过指针addrptr来存储。若成功则返回1,否则返回0。

    ps:gcc编译时,如果用--std=c99选项,编译器会给出警告:“warning: implicit declaration of function ‘inet_aton’”,可以用--std=gnu99代替--std=c99,原因在这:http://stackoverflow.com/questions/1783792/why-does-gcc-report-implicit-declaration-of-function-round

    inet_ntoa将32位的网络字节序二进制IPv4地址转换成相应的点分十进制数串。该函数返回值指向一个静态内存区域。所以是不可重入。如果你要用到这个返回的字符串的话,最好自己拷贝出来。


    字节排序函数:

    uint16_t htons(uint16_t host16bitvalue);
    uint32_t htonl(uint32_t host32bitvalue);
                                                          /*返回网络字节序的值*/
    uint16_t ntohs(uint16_t net16bitvalue);
    uint32_t ntohl(uint32_t net32bitvalue);
                                                          /*返回主机字节序的值*/
    

    16:表示是16bit的值;32:表示是32bit的值;

    s:短整数,即16bit; l:长整数,即32bit;

    h:本地主机字节; n:网络字节;


  • 相关阅读:
    540C: Ice Cave
    540B :School Marks
    欧拉工程第52题:Permuted multiples
    欧拉工程第51题:Prime digit replacements
    C. Tourist's Notes
    B. Quasi Binary
    Keepalived安装后出现的问题总结
    Keepalived+HAproxy实现高可用负载均衡
    CentOS.56安装Redis监控工具RedisLive
    Redis+Keepalived主从热备秒级切换
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3025974.html
Copyright © 2011-2022 走看看