注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

老狗的博客

尽管每一步都很微小,但我确认我在进步

 
 
 

日志

 
 
关于我
sky

认真生活,努力工作 热爱技术,关注DB,存储,分布式,中间层,java,c++,php

网易考拉推荐

c 网络地址转换函数  

2014-12-04 16:57:08|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 1. int getaddrinfo(const char *node, const char *service,
                       const struct addrinfo *hints,
                       struct addrinfo **res);
根据hints的要求,将node主机的service服务转化为可以为socket和bind使用的地址链表,并存储在res中
node:一个主机名或者地址串(IPv4的点分十进制串或者IPv6的16进制串)
service:服务名可以是十进制的端口号,也可以是已定义的服务名称,如ftp、http等
hints:可以是一个空指针,也可以是一个指向某个addrinfo结构体的指针,调用者在这个结构中填入关于期望返回的信息类型的暗示。举例来说:指定的服务既可支持TCP也可支持UDP,所以调用者可以把hints结构中的ai_socktype成员设置成SOCK_DGRAM使得返回的仅仅是适用于数据报套接口的信息。
res:本函数通过result指针参数返回一个指向addrinfo结构体链表的指针。
2. int inet_pton(int af, const char *src, void *dst);
This function converts the character string src into a network address structure in the af address family, then copies the network address structure to dst.
3.  const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
This  function converts the network address structure src in the af address family into a character string, which is copied to a character buffer dst, which is cnt bytes long.

/* Structure describing an Internet (IP) socket address. */
#define __SOCK_SIZE__>--16>->---/* sizeof(struct sockaddr)>-*/


struct sockaddr_in {
sa_family_t>-->---sin_family;>/* Address family>-->---*/
unsigned short int>---sin_port;>--/* Port number>->--->---*/
struct in_addr>---sin_addr;>--/* Internet address>>---*/

/* Pad to size of `struct sockaddr'. */
unsigned char>>---__pad[__SOCK_SIZE__ - sizeof(short int) -
>--->--->---sizeof(unsigned short int) - sizeof(struct in_addr)];
};
#define sin_zero>---__pad>-->---/* for BSD UNIX comp. -FvK>-*/


/* Internet address. */
struct in_addr {
>---__u32>--s_addr;
};

typedef uint32_t in_addr_t;
struct in_addr {
in_addr_t s_addr;
};
./linux/socket.h:48:#define sockaddr_storage __kernel_sockaddr_storage
 7 #define _K_SS_MAXSIZE   128     /* Implementation specific max size */
  8 #define _K_SS_ALIGNSIZE (__alignof__ (struct sockaddr *))
  9                                 /* Implementation specific desired alignment */
 10 
 11 struct __kernel_sockaddr_storage {
 12         unsigned short  ss_family;              /* address family */
 13         /* Following field(s) are implementation specific */
 14         char            __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
 15                                 /* space to achieve desired size, */
 16                                 /* _SS_MAXSIZE value minus size of ss_family */
 17 } __attribute__ ((aligned(_K_SS_ALIGNSIZE)));   /* force desired alignment */
 18 

  评论这张
 
阅读(173)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018