重讀UNIX網絡編程第三章到第十一章筆記整理

因爲第二章之後基本都是純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套接字只需要連接然後發送第一個數據報然後發送第二個、第三個就行了
    這裏寫圖片描述

發佈了33 篇原創文章 · 獲贊 14 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章