1,socket具体的API函数解析
(1) socket :创建一个套接字
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
domain: 指定域/协议族
socket接口不仅仅局限于TCP/IP,他还可以本地通信...
每一种通信模式下面都有一系列自己的协议,归到一类:协议族
AF_UNIX, AF_LOCAL Local communication unix(7)
AF_INET IPv4 Internet protocols ip(7)
AF_INET6 IPv6 Internet protocols ipv6(7)
type:套接字类型
SOCK_STREAM 流式套接字 用于TCP
SOCK_DGRAM 数据报套接字 用于UDP
SOCK_RAW 原始套接字 用于本地域协议
protocol:指定具体的应用层协议
一般为0,代表不知名的私有协议
返回值:
成功返回套接字描述符 (特殊的文件描述符)
失败返回-1
(2) 网络地址
我们日常口头上说的网络地址一般是指 IP地址
但是在socket编程中,规范的讲:网络地址是一个结构体
不同的协议族,他的网络地址结构体是不一样
socket编程接口,提供了一个 通用的网络地址结构体
struct sockaddr {
sa_family_t sa_family;//指定协议族
char sa_data[14];
//没有确定的含义(不同的协议族有不同的含义),
//只是占用14个字节
};
ipv4协议族的网络地址结构体
定义在 #include<netinet/in.h>
struct sockaddr_in
{
sa_family_t sin_family;//指定协议族
u_int16 sin_port;//端口号
struct in_addr sin_addr;//IPV4地址
unsigned char sin_zero[8];//填充8个字节