网络编程中,首先第一步都是创建对应的socket
int socket(int family,int type,int protocol);
参数:
family指明协议族,IPV4或IPV6
type指明套接字类型,字节流套接字,数据报套接字,原始套接字
protocol指明协议类型常值,TCP协议,UDP协议
连接套接字的配置会继承监听套接字的配置。
创建的每个tcp套接字和sctp套接字都在内核有一个接收缓冲区和发送缓冲区
udp套接字只有一个接收缓冲区,没有发送缓冲区。
因为UDP没有流量控制,所以可以一直发,而tcp是有流量控制,当流量过大时,会将相应数据先在发送缓冲区中缓冲一会,再发送出去,如果发送缓冲区也满了,那么对应的write函数会陷入阻塞。
对socket的控制设置有三个方式:
一、 setsockopt和getsockopt函数
它能够设置的参数主要包括这样几类:
1、通用套接字选项,如:接收缓冲区大小,发送缓冲区大小,接收缓冲区低水位标记,发送缓冲区低水位标记,是否保持长连接等
2、IPV4套接字选项,如:加入多播组,离开多播组,目的IP地址等
3、ICMPv6套接字选项
4、IPV6套接字选项,如:
5、TCP套接字选项,如:最大分节大小等。
二、fcntl函数
file control函数,可以执行各种描述符的控制操作。
设置socket为非阻塞IO。
设置socket为信号驱动IO。