频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Apache源代码全景分析:网络地址处理

来源: 作者: 出处:巧巧读书 2007-08-16 进入讨论组
下一页 1 2 3 4 5 6 7 8 9 10 

套接字地址

在了解APR中对IP地址的封装之前,我们首先看一下通常情况下对IP地址的使用情况。

下面的代码掩饰了简单的服务器端套接字的地址初始化过程:

struct sockaddr_in server_addr; /* 本机地址信息 */

server_addr.sin_family=AF_INET;

server_addr.sin_port=htons(SERVPORT);

server_addr.sin_addr.s_addr = INADDR_ANY;

bzero(&(server_addr.sin_zero),8);

……

bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));

  accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size);

Socket API中提供了三种类型的地址:sockaddr,sockaddr_in和sockaddr_un。sockaddr是通用的套接字结构,sockaddr_in为Internet协议族的地址描述结构,sockaddr_un则是Unix协议组的地址描述结构。sockaddr_in结构中的sa_family决定是sockaddr_in还是sockaddr_un。

如果直接使用Socket API提供的地址结构,则至少存在下面的几个问题:

1、在网络应用程序中,对于internet地址,如上面的程序代码所示,通常总是使用sockaddr_in描述,而在一些Socket API函数中则使用sockaddr作为套接字地址,因此在使用的时候必须将sockaddr_in强制转换为sockaddr类型,这是一个麻烦而且容易出错的地方。

2、sockaddr_in也不是一个特别容易理解的数据结构。通常情况下,sin_family和sin_port相对容易记忆,而套接字地址sin_addr.s_addr则未必。套接字的这种结构对一般人而言无疑是一种噩梦。

3、另外一个问题则是Ipv6的地址问题。目前,Apache已经开始同时支持Ipv4和Ipv6两种类型的地址,如果用户需要支持Ipv6,则还必须使用Ipv6对应的地址数据结构。

对于一个良好的类库,不管是Ipv4还是Ipv6协议,都必须提供同样的接口,这种接口必须简单易懂,同时必须尽可能的隐藏内部的细节,比如对于sin_addr.s_addr无非暴露给用户。

基于上面的分析,APR中只使用一种数据结构apr_sockaddr_t来描述IP地址,该结构定义在文件apr_network_io.h中:

struct apr_sockaddr_t {

apr_pool_t *pool;

/*第一部分*/

char *hostname;

char *servname;

/*第二部分*/

apr_port_t port;

apr_int32_t family;

union {

struct sockaddr_in sin;

#if APR_HAVE_IPV6

struct sockaddr_in6 sin6;

#endif

#if APR_HAVE_SA_STORAGE

struct sockaddr_storage sas;

#endif

} sa;

/*第三部分*/

apr_socklen_t salen;

int ipaddr_len;

int addr_str_len;

void *ipaddr_ptr;

apr_sockaddr_t *next;

};专题:http://www.qqread.com/network/server/n326341.html 更多文章 更多内容请看网络管理实用手册网络故障手册Apache配置专题专题,或进入讨论组讨论。

下一页 1 2 3 4 5 6 7 8 9 10 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章