重读UNIX网络编程第三章到第十一章笔记整理

来源:互联网 发布:mediawiki seo 编辑:程序博客网 时间:2024/04/29 05:11

因为第二章之后基本都是纯Socket API的内容, 第三章到第十一章的笔记整理合并到一起。

第三章

  • 3.4 :字节排序函数,涉及到大小端,处理网络字节序和主机字节序的转换
  • 3.6 : 地址转换函数,吹在ASCII字符串与网络字节序的二进制值之间转换网际地址

第四章

  • 这里写图片描述

  • 这里写图片描述

  • 这里写图片描述

  • 4.9节:close函数, 涉及到描述符引用计数,所以多进程并发服务器才可以共享已连接套接字,因为父进程调用close函数知识把该套接字标记成已关闭并导致该套接字描述符减1。只要引用计数的值仍大于0,就不会引发tcp的四分组连接终止序列

第五章

  • 5.9节:处理SIGCHLD信号, 涉及到僵死进程(子进程终止时给父进程发送了一个SIGCHLD信号,若父进程未加处理,则子进程进入僵死状态),所以要建立该信号处理函数,并在函数中调用waitpid来处理
  • 5.10节 :使用wait或者waitpid来处理已终止的子进程,通常是使用waitpid并指定WNOHANG选项,来告知waitpid在有尚未终止的子进程在运行时不要阻塞。

第六章

  • 列表内容

  • 这里写图片描述

  • 这里写图片描述

  • 这里写图片描述

  • 这里写图片描述

  • 同步I/O操作:导致请求进程阻塞,知道I/O操作完成

  • 异步I/O操作:不导致请求进程阻塞

  • 这里写图片描述

  • 6.3节 : select函数,必须得清楚select跟linux特有的epoll的区别, 有三点:

    • 数量限制 : select默认只支持1024个;epoll并没有最大数目限制
    • 内存拷贝 : select需要把fd_set数据结构从用户态到内核态来回拷贝; 而epoll是基于mmap技术用同一块内存实现的
    • 效率 : select每次都要遍历所有文件描述符, 集合越大速度越慢;而epoll维护着一个就绪列表, 每次只需要简单的从列表里取出就行了,只有活跃的socket才会触发相关callback
  • 6.6节 : shutdown函数,shutdown可以不用管引用计数就激发tcp的正常连接终止序列。当关闭连接的写这一半,对于tcp连接, 这称为半关闭(half-close)这里写图片描述

第七章

  • 7.5节 : 通用套接字选项, 常用的有

    • SO_KEEPALIVE
    • SO_REVBUF
    • SO_SNDBUF
    • SO_REUSEADDR
  • 7.9节 : tcp套接字选项, 常用的有

    • TCP_NODELAY
    • TCP_MAXSEG
  • 7.11节 :fcntl函数,常用的用法是使用F_SETFL命令设置O_NOBLOCK文件状态标志, 我们可以把一个套接字设置为非阻塞型。

第八章

  • 列表内容

  • 8.11节 : UDP的connect函数,可以获得性能提升,因为未连接的udp每次sendto发送数据报的时候都要连接然后发送然后断开, 之后第二个数据报又要重复上述步骤,而连接后的udp套接字只需要连接然后发送第一个数据报然后发送第二个、第三个就行了
    这里写图片描述

原创粉丝点击