APUE讀書筆記 第16章 網路IPC 套接字

2021-06-17 21:40:41 字數 2057 閱讀 4205

16.1 引言

*程序能夠通過套接字網路ipc介面和其他程序通訊。通過該介面,其他程序執行位置是透明的,它們可以在同一臺計算機上也可以在不同的計算機上。實際上,這正是套接字的目標之一:同樣的介面既可以用於計算機間通訊又可以用於計算機內通訊

*16.2 套接字描述符

*要建立乙個套接字,可以呼叫socket函式

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

*套接字通訊是雙向的,可以採用函式shutdown來禁止套接字上的輸入/輸出

int shutdown(int sockfd, int how);

16.3 定址

*確定乙個目標通訊程序使用程序標識的方式,程序的標識有兩個部分:計算機的網路位址可以幫助標識計算機網路上想與之通訊的計算機,而服務可以幫助標識計算機上的特定的程序

*如果處理器架構支援大端(big-endian)位元組序,那麼最大位元組位址對應於數字最低有效位元組(lsb)上;小端(little-endian)位元組序則相反:數字最低位元組對應於最小位元組位址

*套接字可以自由地新增額外的成員並且定義sa_data成員的大小

struct sockaddr

struct sockaddr

*在ipv4網際網路(af_inet)中,套接字位址用結構sockaddr_in表示

*可以用bind函式將位址繫結到乙個套接字

16.4 建立連線

*可以用connect建立乙個連線

*伺服器呼叫listen來宣告可以接受連線請求

*使用函式accept獲得連線請求並建立連線。函式accept所返回的檔案描述符是套接字描述符,該描述符連線到呼叫connect的客戶端

16.5 資料傳輸

*三個函式用來傳送資料,三個用來接收資料

*最簡單的是send,它和write很像,但是可以指定標識來改變處理傳輸資料的方式

*函式sendto和send很類似。區別在於sendto允許在無連線的套接字上制定乙個目標位址

*可以使用不止乙個的選擇來通過套接字傳送資料。可以呼叫帶有msghdr結構的sendmsg來指定多重緩衝區傳輸資料,這和writev很相像

*函式recv和read很像,但是允許指定選項來控制如何接收資料

*如果有興趣定位傳送者,可以使用recvfrom來得到資料傳送者的源位址

*為了將接收到的資料送入多個緩衝區(類似於readv),或者想接收輔助資料,可以使用recvmsg

16.6 套接字選項

*套接字機制提供兩個套接字選項介面來控制套接字行為。乙個介面用來設定選項,另乙個介面允許查詢乙個選項的狀態。可以獲取或設定三種選項:

(1)通用選項,工作在所有套接字型別上

(2)在套接字層次管理的選項,但是依賴於下層協議的支援

(3)特定於某協議的選項,為每個協議所獨有

*可以採用setsockopt函式來設定套接字選項

*使用getsockopt函式來發現選項的當前值

int getsockopt(int sockfd, int level, int option, void *restrict val, socklen_t *resctrict lenp)

注意到引數lenp是乙個指向整數的指標。在呼叫getsockopt之前,設定該整數為複製選項緩衝區的大小。如果實際的尺寸大於此值,選項會被截斷而不報錯;如果實際尺寸正好等於或者小於此值,那麼返回時將此值更新為實際尺寸

16.7 帶外資料

*帶外資料(out-of-band data)是一些通訊協議所支援的可選特徵,允許更高優先順序的資料比普通資料優先傳輸。即使傳輸佇列已經有資料,帶外資料先行傳輸。tcp支援帶外資料,但是udp不支援

*tcp支援緊急標記(urgent mark)的概念:在普通資料流中緊急資料所在的位置

16.8 非阻塞和非同步i/o

*通常,recv函式沒有資料可用會阻塞等待。同樣地,當套接字輸出佇列沒有足夠空間來傳送訊息時函式send會阻塞。在套接字非阻塞模式下,行為會改變。在這種情況下,這些函式不會阻塞而是失敗,設定errno為ewouldblock或者eagain。當這些發生時,可以使用poll或select來判斷何時能接收或傳輸資料

APUE讀書筆記 第10章 訊號

第10章 訊號 10.1 引言 訊號是軟體中斷。訊號提供了一種處理非同步事件的方法 10.2 訊號概念 每個訊號都有乙個名字。這些名字都以三個字元sig開頭 在標頭檔案中,這些訊號被定義為正整數 訊號編號 不存在編號為0的訊號。kill函式對訊號編號0有特殊的應用。此種訊號編號值被稱為空訊號 10....

APUE讀書筆記 第14章 高階I O

14.1 引言 高階i o包括非阻塞i o 記錄鎖 系統v流機制 i o多路轉換 select和poll函式 readv和writev函式以及儲存對映i o mmap 14.2 非阻塞i o 非阻塞i o使我們可以呼叫open read和write這樣的i o操作,並使這些操作不會永遠阻塞 14.3...

APUE讀書筆記 第9章 程序關係

第9章 程序關係 9.1 引言 每個程序都有乙個父程序 初始的核心程序並無父程序,也可以說其父程序就是它自己 當子程序終止時,父程序得到通知並能取得子程序的退出狀態 9.2 終端登入 終端可以是基於字元的終端 簡單的基於字元終端的圖形終端,或者是執行視窗系統的圖形終端 系統管理員建立通常名為 etc...