主線程建立監聽套接字,建立額外工作執行緒,關聯iocp,負責等待和接受到來的連線。
呼叫getqueuedcompletionstatus函數,函式返回:
1 呼叫失敗
2 套接字被對方關閉
3 請求成功完成
程式首先定義per-handleper-io的運算元據的結構型別
#define buffer_size 1024typedefstruct
_per_handle_dataper_handle_data,*pper_handle_data;
typedef
struct
_per_io_dataper_io_data,*pper_io_data;
主要過程:
1 主線程建立完成埠物件,建立工作執行緒處理完成埠物件中的事件
2 建立監聽套接字,開始監聽伺服器端口
3 進入無限迴圈,處理到來的請求
1)呼叫accept函式等待接受未決的連線請求 2)建立乙個per-handle資料 3)投遞乙個接收請求
實現**:
voidmain()
}dword winapi serverthread(lpvoid lpparam
if(dwtrans == 0 && (pperio->noperationtype==op_read||pperio->noperationtype==op_write))
switch(pperio->noperationtype)
break
;
case
op_write:
case
op_accept:
break
; }
}return0;
}
簡單的使用 IOCP 模型的 TCP 伺服器例子
例子中有兩種型別的執行緒 主線程和它建立的執行緒。主線程建立監聽套接字,建立額外的工作執行緒,關聯 iocp 負責等待和接受到來的連線等。由主線程建立的執行緒負責處理 i o事件,這些執行緒呼叫 getqueuedcompletionstatus 函式在完成埠物件上等待完成的 i o操作。getqu...
TCP伺服器模型
迴圈伺服器 迴圈伺服器在同乙個時刻只可以響應乙個客戶端的請求 併發伺服器 併發伺服器在同乙個時刻可以響應多個客戶端的請求 9.1 迴圈伺服器 udp伺服器 udp迴圈伺服器的實現非常簡單 udp伺服器每次從套接字上讀取乙個客戶端的請求,處理,然後將結果返回給客戶機.可以用下面的演算法來實現.sock...
TCP併發伺服器模型(一)
本篇敘述的tcp併發伺服器模型如下圖所示 伺服器建立並繫結套接字後fork出幾個子程序,子程序中分別進行accept 該函式為阻塞函式 recv 處理資料然後再次acept,這樣迴圈下去。所有客戶端發來的資訊都是直接由子程序處理。例程 如下,在處理客戶端請求之前,伺服器先fork了3個子程序,然後將...