4.7.1 IPv6的Socket API函数
源自美国加利福尼亚大学Berkeley 分校BSD UNIX系统的Socket API (套接字)是TCP/IP网络环境下进行通信的重要工具。Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,发送和接收的信息都通过这个Socket接口来实现。
IPv6的Socket API函数中一部分沿用了IPv4 的Socket API函数,也新增了一些IPv6专用的Socket API函数,这些Socket API 函数如表4.3所示。
表4.3 IPv6 的Socket API函数
Getaddrinfo ( ) 的函数原形为:int getaddrinfo(const char * hostname, const,char *service, const struct addrinfo * hints, structaddrinfo * * res)。
其中,hostname 可以是主机名地址或者是IPv6 的地址;service 可以是服务名或十进制端口号,在编程时提供很大的方便;Hints相当于一个过滤器,只有符合Hints结构的内容才会返回到res指针中。
socket ( ) 函数原形为:int socket ( int domain,int type,int protocol);
其中第一个参数确定协议族,如符号常数AS_NS表示用Xerox网络服务地址族,符号常数AF_IN ET 6表示用IPv6协议;第二个参数指明了使用的通信服务类型,如符号常数SOCK_DGRAM表示数据报,用SOCK_STREAM 表示字节流;第三个参数指明此Socket请求使用的协议,如符号常数IPPRO TO_TCP表示用TCP协议,用IPPRO TO_UDP表示用UDP协议。
listen ( ) 函数的函数原型为:int listen ( int sockfd,int backlog);
其中,sockfd 是socket 函数返回的socket 描述符;backlog 指定在请求队列中允许的最大请求数。
accept ( ) 函数的函数原型为:int accept ( int sockfd,void * addr,int * addrlen);
其中,sockfd是被监听的socket描述符;addr通常是一个指向sockaddr-in变量的指针,该变量用来存放提出连接请求服务的主机的信息;addrten 通常为一个指向值为sizeof(st ruct sockaddr in)的整型指针变量。
connect ( ) 函数原型为: int connect ( in t sockfd,struct sockaddr *serv_addr,int addrlen);
其中,sockfd是socket函数返回的socket描述符;serv_addr是包含远端主机IP地址和端口号的指针;addrlen是远端地址结构的长度。
send ( ) 函数原型为: int send ( int sockfd,const void * msg,int len,int f lags);
其中,sockfd是用来传输数据的socket描述符;msg 是一个指向要发送数据的指针;len是以字节为单位的数据的长度;flags一般情况下置为0。recv ( ) 函数原型为: int recv ( int sockfd,void *buf,int len,unsigned int f lags);其中,sockfd是接受数据的socket描述符;buf是存放接收数据的缓冲区;len是缓冲的长度;flags也被置为0。