socket的工作模式

2021-04-13 14:18:19 字數 842 閱讀 3891

2023年08月19日 15:27:00

阻塞模式

是socket的預設方式,也是最常用的方式,即函式阻塞直到呼叫完畢。可參見前面的例子。

可能造成阻塞的函式有:connect()、accept()、讀寫函式、select()、poll()、gethostbyname()等。

非阻塞模式

程式呼叫可能造成阻塞的函式時,如果會發生阻塞,這些函式返回-1並將errno設定為eagain或ewouldblock,程式可繼續向下執行。可能阻塞的函式對應的任務完成,則再次呼叫該函式時就返回0表示執行結束。

非阻塞模式可以避免程式死鎖,但是需要程式不斷檢查各個可能阻塞的函式的狀態,當乙個應用程式使用了非阻塞模式的套接字,它需要使用乙個迴圈來不聽的測試是否乙個檔案描述符有資料可讀(稱做polling)。應用程式不停的polling核心來檢查是否i/o操作已經就緒。這將是乙個極浪費cpu資源的操作,因此不能實際應用。一般非阻塞模式是與同步i/o模式共同使用的。

進入非阻塞模式的方法,請參見函式說明

i/o多路復用(同步i/o模式)

使用select()、poll()等函式實現對多個socket的同步i/o操作。它能同時等待多個socket描述符,而這些socket描述符其中的任意乙個進入讀就緒/寫就緒/出錯狀態,select()函式就可以返回。請參見函式說明和程式

訊號驅動i/o

非同步i/o

Socket工作原理

socket可以看成在兩個程式進行通訊連線中的乙個端點,是連線應用程式和網路驅動程式的橋梁,socket在應用程式中建立,通過繫結與網路驅動建立關係。此後,應用程式送給socket的資料,由socket交網路驅動程式向網路上傳送出去。計算機從網路上收到與該socket繫結ip位址和埠號相關的資料後,...

Socket的非阻塞模式

阻塞模式 如果伺服器沒有回應則一直等待,若等待75秒後仍沒有響應則返回 1 非阻塞模式 無論connect是否成功都立即返回 非阻塞與阻塞工作模式的優缺點 阻塞處理簡單,非阻塞處理複雜 阻塞效率低,非阻塞效率高 阻塞模式,常見的通訊模型為多執行緒模型,服務端accept之後,對每個socket建立乙...

TCP UDP的套接字Socket通訊工作流程

套接字是一種通訊機制,憑藉這種機制,客戶 伺服器系統的開發工作既可以在本地單機上進行,也可以跨網路進行,linux所提供的功能 如列印服務,ftp等 通常都是通過套接字來進行通訊的,套接字的建立和使用與管道是有區別的,因為套接字明確地將客戶和伺服器區分出來,套接字可以實現將多個客戶連線到乙個伺服器。...