winsock IO模型WSAAsynSelect

2022-11-24 19:23:17 字數 2475 閱讀 2189

wsaasynselect模型: wsaasynselect模型也是一個常用的非同步i/o模型。應用程式可以在一個套接字上接收以 windows訊息為基礎的網路事件通知。該模型的實現方法是通過呼叫wsaasynselect函 數 自動將套接字設定為非阻塞模式,並向windows註冊一個或多個網路時間,並提供一 個通知時使用的視窗控制代碼。當註冊的事件發生時,對應的視窗將收到一個基於訊息的通知。

int  wsaasyncselect( socket s, hwnd hwnd, u_int wmsg, long levent);
s為需要事件通知的套接字 hwnd為接收訊息的視窗控制代碼 wmsg為要接收的訊息 levent為掩碼,指定應用程式感興趣的網路事件組合,主要如下:

#define fd_read_bit 0

#define fd_read (1 << fd_read_bit)

#define fd_write_bit 1

#define fd_write (1 << fd_write_bit)

#define fd_oob_bit 2

#define fd_oob (1 << fd_oob_bit)

#define fd_accept_bit 3

#define fd_accept (1 << fd_accept_bit)

#define fd_connect_bit 4

#define fd_connect (1 << fd_connect_bit)

#define fd_close_bit 5

#define fd_close (1 << fd_close_bit)

wsaasynselect例項:

#include #include 

#define port 5150

#define msgsize 1024

#define wm_socket wm_user+1

#pragma comment(lib, "ws2_32.lib")lresult callback wndproc(hwnd, uint, wparam, lparam);

int winapi winmain(hinstance hinstance, hinstance hprevinstance, pstr szcmdline, int

icmdshow)

window class name

text ("

asyncselect model

"), //

window caption

window style

cw_usedefault, //

initial x position

cw_usedefault, //

initial y position

cw_usedefault, //

initial x size

cw_usedefault, //

initial y size

null, //

parent window handle

null, //

window menu handle

hinstance, //

program instance handle

null) ; //

creation parameters

showwindow(hwnd, icmdshow);

updatewindow(hwnd);

while (getmessage(&msg, null, 0, 0

))

return

msg.wparam; }

lresult callback wndproc (hwnd hwnd, uint message, wparam wparam, lparam lparam)

switch (wsagetselectevent(lparam)) //

lparam的低位元組指定已經發生的網路事件

else

break

;

case

fd_close:

closesocket(wparam);

break

; }

return0;

}return

defwindowproc(hwnd, message, wparam, lparam);

}

當應用程式視窗hwnd收到訊息時,wmsg.wparam引數標識了套接字,lparam的低字標明 了網路事件,高字則包含錯誤**。

IO模型之非阻塞IO

linux下,可以通過設定socket使其變為non blocking。當對一個non blocking socket執行讀操作時,流程是這個樣子 從圖中可以看出,當使用者程序發出read操作時,如果kernel中的資料還沒有準備好,那麼它並不會block使用者程序,而是立刻返回一個error。從使...

網路io模型

內容概要 一 網路io的兩個階段 二 網路io的4種模型 模型為解決實際問題提供了一種思路 1 網路io的兩個階段 對於執行程式來說 網路io分為兩個階段 wait code copy code copy code階段花費的時間要遠遠小於wait code階段花費的時間 套接字命令存在的io阻塞情況...

IO模型 IO多路複用機制

1 i o多路複用技術通過把多個i o的阻塞複用到同一個select poll或epoll的阻塞上,從而使得系統在單執行緒的情況下可以同時處理多個客戶端請求。與傳統的多執行緒 多程序模型比,i o多路複用的最大優勢是系統開銷小,系統不需要建立新的額外程序或者執行緒。2 select,poll,epo...