扩展:INADDR_ANY:实现一个socket接口同时监听本地的多个IP
socket选项总结(setsocketopt)
※※※※Socket中SO_REUSEADDR详解
???SO_SNDBUF???
地址转换函数
1、传输层协议主要用于主机的进程与进程之间的相互通信
2、网络层协议主要应用于主机与主机之间的相互通信,
所以网络通信本质上是进程间通信。
套接字socket
1、是一种文件,用于进程间网络通信的文件类型→可使用文件描述符引用套接字
与管道类似的,区别在于
1、管道主要应用于本地进程间通信,
2、套接字一般应用于网络进程间(不同主机的进程间)数据的通信,
2、本质是内核创建的缓冲区(连接结束后也由内核释放)
在TCP/IP协议中,是用“IP地址(互联网中主机地址)+TCP/UDP端口号(唯一的标识进程)”的方式来进行网络通信
1、socket:创建初始套接字(未绑定IP和port)
Socket函数中的三个参数其实就是把抽象的socket具体化的条件,
1、domain参数决定了图中所示的第二层通信域
2、type决定了第三层的通信模式
3、protocol决定了第四层真正的通信协议。
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
1、domain: 【网络协议通信】类型
AF_INET:表示使用IPv4通信
AF_INET6 表示使用IPv6通信
AF_UNIX:本地协议,就是当客户端和服务器在同一台电脑的时候使用,(Unix和Linux系统上使用)。
2、type: 套接字的类型,常用的有流式套接字/数据报套接字。
SOCK_STREAM(流式套接字) 默认协议:TCP
SOCK_DGRAM(数据报套接字) 默认协议:UDP
SOCK_RAW(原始套接字) ICMP协议。(ping、traceroute使用该协议)
3、protocol: 确定通信协议内细分的具体通信方式//0表示使用默认协议
4、返回值说明:
成功返回一个新的文件描述符;失败返回-1,同时设置errno
2、bind::将ip+port和socket创建的套接字绑定在一起
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
参数说明:
1、sockfd:socket函数返创建的套接字文件描述符
2、addr:【套接字地址结构体指针】(包括了IP地址和端口号) 通用指针类型:实际上是可以接受多种协议的sockaddr结构体,
若=0则内核会随机绑定一个临时端口。
3、addrlen:是参数addr这个套接字地址的结构大小,即sizeof(struct sockaddr) 以适应不同长度的sockaddr
4、返回值:成功返回0,失败返回-1同时设置errno变量
绑定的端口号应1024~65535范围 且没有被其他进程占用
【1