5.1 主机字节序和网络字节序
	大端序:一个整数的高位字节存储在内存的低地址处
	小端序:整数的高位字节存储在内存的高地址处(现代pc大多采用小端序,因此小端序又被称为主机字节序)

	发送端总是把要发送的数据转为大端字节序后再发送,而接收端知道对方传过来的数据是采用大端字节序,所以接收端
  可以根据自身采用的字节序决定是否对接收到的数据进行转换。因此,大端序也称为网络字节序。
    即使在同一台机器的2个进程通信,也需要考虑字节序的问题。
    
    htol();
    htons();
    ntohl();
    ntohs();

    //ip地址转换
    inet_addr();
    inet_aton();
    inet_ntoa();

    socket(int domain, int type, int protocol);

    命名 socket:
    	创建socket时,我们给它指定了地址族,但是并未指定使用该地址族中的哪个具体socket地址。将一个socket与socket地址
      绑定称为给socket命名。在服务器程序中,我们通常要命名socket,因为只有命名后客户端才能知道该如何连接它。客户端则通常
      不需要命名socket,而是采用匿名方式。
     
    命名socket调用的是 bind();

    监听socket:
    	socket被命名之后,还不能马上接受客户连接,我们需要使用如下系统调用来创建一个监听队列以存放待处理的客户连接。
    	listen(int sockfd, int backlog);
    	backlog 参数提示内核监听队列的最大长度。监听队列的长度如果超过backlog,服务器将不受理新的客户连接,客户端也将收到
      ECONNREFUSED错误信息。在内部版本 2.2之前的Linux中,backlog参数是指所有处于半连接状态(SYN_RCVD)和完全连接状态(ESTABLISHED)
      的socket上限。但自内核版本2.2以后,它只表示处于完全连接状态的socket的上限,处于半连接状态的socket上限则由 /proc/sys/net/ipv4/tcp_max_syn_backlog
      内核参数定义。

    接收连接:
    	从listen监听队列中接受一个连接:
    	accept();

    	我们把执行过 listen调用,处于listen状态的 socket 称为监听socket,而所有处于 ESTABLISHED 状态的socket则称为连接socket。

    发起连接:
    	connect();

    关闭连接:
    	close(); // fd引用计数减1,fd=0 时才真正关闭
    	shutdown();

    数据读写:
    	recv();
    	send();

    	recvfrom();
    	sendto();

    	recvmsg();
    	sendmsg();

    	sockatmark();
    	getsockname();
    	getpeername();
    	getsockopt();
    	setsockopt();

    socket 选项:
    	SO_REUSEADDR 选项 : 强制处于 time_wait 状态的连接占用socket地址。
    	SO_RCVBUF 和 SO_SNDBUF : tcp接收缓冲区和发送缓冲区大小
    	SO_RCVLOWAT 和 SO_SNDLOWAT : tcp接收缓冲区和发送缓冲区的低水位标记,他们一般被IO复用系统调用用来判断socket是否可读或可写.
    	SO_LINGER : 控制 close系统调用在关闭 tcp连接时的行为。

    gethostbyname();
    gethostbyaddr();
    getservbyname();
    getservbport();
    getaddrinfo();
    getnameinfo();

 

5.1 socket 地址 API

5.1.2 通用 socket 地址

 

 

5.1.3 专用 socket 地址

 

5.1.4 IP 地址转换函数

 

5.2 创建 socket 

 

5.3 命令 socket

 

5.4 监听 socket

 

5.5 接受连接

 

5.6 发起连接

 

5.7 关闭连接

 

5.8 数据读写

 

5.9 带外标记

 

5.10 地址信息函数

 

5.11 socket 选项

 

 

5.12 网络信息 API

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐