WIN網路程式設計 IOCP服務程式設計注意事項

2021-05-14 16:41:29 字數 922 閱讀 7514

iocp服務程式設計注意事項

1、記憶體資源管理

每個重疊的傳送或接收操作所提交的資料緩衝區很可能會鎖定。記憶體被鎖定之後,它不能從物理記憶體換出。但作業系統對

鎖定記憶體的數量(不是投遞的運算元量)有限制,如果伺服器預期處理大量的併發客戶,可以在每個連線上投遞乙個0位元組的接收操作,這樣不會有記憶體鎖定。0位元組的接收操作完成後,伺服器可以簡單執行乙個非阻塞的接收來獲取快取內部socket接收緩衝區中的所有資料。當非阻塞接收呼叫以wsaewouldblock失敗之後,就不有未決的資料了。

系統頁的大小需要考慮,使用getsysteminfo函式來獲取當前系統的頁大小,即使乙個操作投遞了比當前頁大小還要小的的緩衝區,系統實際會為它鎖定當前系統頁大小的空間,這樣造成空間浪費。

2、接受連線

能使用重疊i/o接受客戶的winsock函式僅為acceptex,必須保證外面有足夠的acceptex呼叫,以便及時處理到來的連線。呼叫listen後,會自動接受到來的連線放入系統佇列(在acceptex處理時,其它待acceptex處理的連線放入系統佇列),但最大不能超過listen函式指定的backlog限制,這意味著要投入多個acceptex,否則,acceptex的數量加上listen函式指定的backlog數量限制了當前能夠進來的連線數量。建議對acceptex的呼叫數量在最小值和最大值之間變化,未決i/o小於最小值時,增加額外的acceptex i/o。

使用wsaeventselect函式為監聽socket關聯事件物件,註冊fd_accept通知訊息。如果投遞的acceptex操作用完,但仍有到來的客戶連線,事件物件就會受信,說明需要投遞額外的acceptex i/o。

3、惡意客戶連線問題

4、包重新排序

提交到i/o完成埠的操作是按順序提交,但執行緒排程會造成順序錯亂,需要給每個提交寫i/o的緩衝區物件增加序列號,保證資料的連續傳送。同理,每個提交的讀i/o也要分配序列號,

WIN網路程式設計 IOCP服務程式 (

iocpserver.cpp檔案 ciocpserver類的測試程式 include iocp.h include include class cmyserver public ciocpserver void onconnectionclosing ciocpcontext pcontext,ci...

WIN網路程式設計 IOCP服務程式設計注意事項

iocp服務程式設計注意事項 記憶體資源管理 每個重疊的傳送或接收操作所提交的資料緩衝區很可能會鎖定。記憶體被鎖定之後,它不能從物理記憶體換出。但作業系統對 鎖定記憶體的數量 不是投遞的運算元量 有限制,如果伺服器預期處理大量的併發客戶,可以在每個連線上投遞乙個0位元組的接收操作,這樣不會有記憶體鎖...

網路程式設計 完成埠IOCP

分類 網路程式設計 2009 12 31 11 20 755人閱讀收藏 舉報 裝置 windows作業系統上允許通訊的任何東西,比如檔案 目錄 序列口 並行口 郵件槽 命名管道 無名管道 套接字 控制台 邏輯磁碟 物理磁碟等。絕大多數與裝置打交道的函式都是createfile readfile wr...