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();
1000字范文,内容丰富有趣,学习的好帮手!