各模型關閉套接字時機

2022-05-03 07:15:11 字數 1064 閱讀 8204

1.select

readfds集合有下列事件發生時,會被標識:

資料可讀;連線已經關閉、重啟或者中斷;如果listen已經呼叫,並且有乙個連線未決,accept可以成功。

select函式會返回,有多少個socket發生了事件。

要關閉乙個套接字時,判斷select返回》0,然後recv套接字,出錯,就代表這個socket可以closesocket了。

2.wsaasyncselect

int wsaasyncselect(

socket s,

hwnd hwnd,

unsigned int wmsg,

long levent

);第四個引數levent,可以設定fd_close

當有socket被關閉時,會傳送一條這個訊息

3.wsaeventselect

int wsaeventselect(

socket s,

wsaevent heventobject,

long lnetworkevents

);第三個引數也可以設定fd_close

然後int wsaenumnetworkevents(

socket s,

wsaevent heventobject,

lpwsanetworkevents lpnetworkevents

);的第三個引數指明了是不是發生了fd_close

wsanetworkevents event;

::wsaenumnetworkevents(psocket->s, psocket->event, &event);

else if(event.lnetworkevents & fd_close) // 套節字關閉

4.重疊io

這個函式出錯了,就代表socket出錯了

5.io完成埠

這個msdn上就有解釋

順便說下,這5種模型有意思的區別

以本文順序來說

前三種,是等待事件,然後再傳送乙個io(recv,accept)。

後二種,是先發乙個io,再等待事件,表示io完成了。

套接字i o模型

當套接字建立時,預設情況下是工作在阻塞模式。在阻塞模式下,執行i o的winsock呼叫 如send 和recv 一直到操作完成時才返回。比如呼叫recv 函式,如果對應的緩衝區沒有資料到來。呼叫者將會一直等待下去,直到有資料到達為止。1 阻塞 blocking 模型 對於以下函式呼叫 int ir...

套接字I O模型

在unix下可用的5種i o模型為 柱塞i o模型 非柱塞i o模型 i o復用 select和poll 訊號驅動式i o sigio 非同步i o 柱塞式i o模型 最流行的i o模型是柱塞式i o模型,預設情況下所有套接字都是用柱塞的,以資料報套接字為例子,如圖 程序呼叫recvfrom,其系統...

優雅地斷開套接字連線 套接字半關閉

呼叫close函式斷開連線,意味著完全斷開連線,不僅無法傳輸資料,而且也不能接收資料。兩台主機通過套接字建立連線後進入可交換資料的狀態。把建立套接字後可交換資料的狀態看作一種流。為了實現雙向通訊,套接字生成的兩個流。shutdown函式關閉其中乙個流。呼叫上述函式時,第二個引數決定斷開連線的方式 s...