5.1.3 非塞模式套接字的優勢和不足
由於使用非阻塞套接字在呼叫函式時,會經常返回WSAEWOULDBLOCK錯誤。所以在任何時候,都應仔細檢查返回程式碼並作好對“失敗”的準備。應用程式連續不斷地呼叫這個函式,直到它返回成功指示為止。上面的程式清單中,在While迴圈體內不斷地呼叫recv()函式,以讀入1024個位元組的資料。這種做法很浪費系統資源。
要完成這樣的操作,有人使用MSG_PEEK標誌呼叫recv()函式檢視緩衝區中是否有資料可讀。同樣,這種方法也不好。因為該做法對系統造成的開銷是很大的,並且應用程式至少要呼叫recv()函式兩次,才能實際地讀入資料。較好的做法是,使用套接字的“I/O模型”來判斷非阻塞套接字是否可讀可寫。關於套接字的“I/O模型”,將在後續章節中介紹。
非阻塞模式套接字與阻塞模式套接字相比,不容易使用。使用非阻塞模式套接字,需要編寫更多的程式碼,以便在每個Windows Sockets API函式呼叫中,對收到的WSAEWOULDBLOCK錯誤進行處理。因此,非阻塞套接字便顯得有些難於使用。
但是,非阻塞套接字在控制建立的多個連線,在資料的收發量不均,時間不定時,明顯具有優勢。這種套接字在使用上存在一定難度,但只要排除了這些困難,它在功能上還是非常強大的。通常情況下,可考慮使用套接字的“I/O模型”,它有助於應用程式通過非同步方式,同時對一個或多個套接字的通訊加以管理。
相關文章
- asp.net的優勢和不足ASP.NET
- Docker的優勢與不足Docker
- 網站建設中CSS的優勢和不足網站CSS
- Oracle不足與MySQL優勢OracleMySql
- 微服務架構的優勢與不足微服務架構
- nginx建立和監聽套接字分析Nginx
- IPC之套接字
- 網路套接字
- Linux :套接字Linux
- 其它行業半路轉web前端開發,優勢和不足有哪些?行業Web前端
- 套接字地址結構
- 《UNIX網路程式設計》筆記 - 套接字選項/UDP套接字程式設計筆記UDP
- Linux 下的程式間通訊:套接字和訊號Linux
- python套接字基本使用Python
- Socket套接字通訊原理
- Java套接字程式設計Java程式設計
- 學習--原始套接字(轉)
- 微服務實戰(一):微服務架構的優勢與不足微服務架構
- MySQL資料庫的套接字檔案和pid檔案MySql資料庫
- 套接字socket 的地址族和型別、工作原理、建立過程型別
- UNIX網路程式設計(6)--套接字地址結構、通用套接字地址結構程式設計
- 什麼是MongoDB,它的優勢和不足以及適用場景是什麼?MongoDB
- python UDP套接字通訊PythonUDP
- Python 套接字內建方法Python
- Java網路通訊套接字Java
- Linux/UNIX套接字連線Linux
- 住宅IP的優勢與不足:如何選擇適合自己的住宅IP?
- 「分散式技術專題」非獨立儲存的優勢與劣勢分散式
- Oracle歸檔模式和非歸檔模式Oracle模式
- JavaScript - 模式視窗和非模式視窗JavaScript模式
- 程式設計師的優勢和劣勢程式設計師
- Oracle歸檔模式和非歸檔模式的區別Oracle模式
- 基本TCP套接字程式設計APITCP程式設計API
- Python原始套接字程式設計Python程式設計
- Linux下套接字詳解(十)---epoll模式下的IO多路複用伺服器Linux模式伺服器
- SaaS模式的CRM系統有哪些優勢?模式
- 索引原理和優勢索引
- 區塊鏈Dapp的劣勢和優勢區塊鏈APP