文档详情

Linux/UNIX网络编程甘刚电子教案 第06章名字与地址转换编程.ppt

发布:2017-08-17约1.15万字共34页下载文档
文本预览下载声明
#include unp.h ? int udp_server(const char *host, const char *serv, socklen_t *addrlenp) { int sockfd, n; struct addrinfo hints, *res, *ressave; bzero(hints, sizeof(struct addrinfo)); hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; if ( (n = getaddrinfo(host, serv, hints, res)) != 0) err_quit(udp_server error for %s, %s: %s,host, serv, gai_strerror(n)); ressave = res; do { sockfd = socket(res-ai_family, res-ai_socktype, res-ai_protocol); if (sockfd 0) continue; /* error, try next one */ if (bind(sockfd, res-ai_addr, res-ai_addrlen) == 0) break; /* success */ Close(sockfd); /* bind error, close and try next one */ } while ( (res = res-ai_next) != NULL); if (res == NULL) /* errno from final socket() or bind() */ err_sys(udp_server error for %s, %s, host, serv); if (addrlenp) *addrlenp = res-ai_addrlen; /* return size of protocol address */ freeaddrinfo(ressave); return(sockfd); } 这个函数除了没有调用listen外,几乎与tcp_liste()相同。我们将地址族设为AF_UNSPEC,而UDP套接口没有设置SO_REUSEADDR选项,因为对UDP套接口来说,没有TCP那样的TIMEWAIT状态,所以启动服务器时不需要设置这个套接口选项。 getnameinfo函数 getnameinfo()函数,该函数以一个套接口地址为参数,返回一个描述主机的字符串和一个描述服务的字符串。同样这个函数也是独立于协议的,也就是说,用户不必关心在套接口地址结构中的协议地址的类型,这些细节由函数自己处理。函数定义如下: # include unp.H int getnameinfo (const struct sockaddr *sockaddr , socklen_t addrlen , char *host , size_t hostlen , char *serv , size_t servlen , int flags); 返回:若成功返回0,若出错返回-1。 第6章 名字与地址转换编程 知识点: 域名系统作用 域名系统对应记录 从域名解析对应IP 从IP解析对应域名 现在的网络都是使用名字来访问服务器的,而不是使用地址来访问。 那它们是怎么转换的呢?答案就是利用名字与地址的转换函数实现的:gethostbyname和gethostbyaddr在主机名字与IP地址间进行转换,getservbyname和getservbyport在服务名字和端口号间进行转换,并且还要介绍两个与协议无关的getaddrinfo和getnameinfo函数 域名系统就是通常所说的DNS(Domain Name System)系统,而DNS系统主要用于主机名与IP地址间的映射,同时还可以通过主机名或主机地址获取主机的相关信息。 那么在DNS系统中是怎样实现主机名与IP地址间的映射的呢?答案就是通过资源记录来实现。在DNS中的条目称为资源记录RR(Resource Record),它们主要有以下几类: (1)A。A记录将一个域名地址对应一个2bit的IPv4地址。 (2)AAAA。AAAA记录(称为“四A”记录)将主机名映射为128位的IPv6地址。 (3)NS。NS记录用于指定一个域名服务器,它负责定义由哪个域名服务器负责管理维护本区域的记录。 (4)MX.MX记录用于指定一台主机的域名,所有发送到本域的电子邮件都由这台主机接收。 (5)PTR。PTR记录(称为“指针记录”)
显示全部
相似文档