socket套接字
socket 套接字,一种特殊的I/O接口,是一种常用的进程间通信机制
socket接口常用类型有:
流式socket (SOCK_STREAM)可靠的、面向连接的通信流,使用TCP协议
数据报socket (SOCK_DGRAM)提供无连接的服务,使用UDP协议
原始socket 允许对底层协议如 IP 或 ICMP 进行直接访问,它功能强大但使用较为不便,主要用于一些协议的开发
地址结构
struct sockaddr
{
unsigned short sa_family; /地址族/
char sa_data[14]; /14 字节的协议地址,包含该 socket 的IP 地址和端口号。/
};
struct sockaddr_in
{
short int sa_family; /地址族/
unsigned short int sin_port; /端口号/
struct in_addr sin_addr; /IP 地址/
unsigned char sin_zero[8]; /填充 0 以保持与 struct sockaddr 同样大小/
};
这两个数据类型是等效的,可以相互转化,通常 sockaddr_in 数据类型使用更为方便。
sa_family表示地址族(Address Family),也就是 IP 地址类型,常用有AF_INET 和 AF_INET6。AF 是“Address Family”的简写,INET是“Inetnet”的简写。AF_INET 表示 IPv4 地址;AF_INET6 表示 IPv6 地址。
在 Linux 中,一些函数 可以实现主机名和地址的转化,最为常见的有 gethostbyname()、gethostbyaddr()和 getaddrinfo()等,它们都可 以实现 IPv4 和 IPv6 的地址和主机名之间的转化。其中 gethostbyname()是将主机名转化为 IP 地址, gethostbyaddr()则是逆操作,是将 IP 地址转化为主机名,另外 getaddrinfo()还能实现自动识别 IPv4 地址和 IPv6 地址。
包含在头文件:#include <netdb.h>