[Blocking 与 Non-blocking 模式]
Blocking 模式:使用者呼叫此一模式之函式时,会进入此函式之内部,直到
条件或资料完全符合时再回到呼叫点。
Non-blocking 模式:使用者呼叫此一模式之函式时,进入此函式之内部,
依当时之条件或资料做适当之回覆,并不会停留在函式之内部到条件或资料
完全符合後才回应。
使用者必需注意的是,WINSOCK 定义之 Blocking 模式与一般 Unix 的不太相
同。WINSOCK定义允许应用程式在呼叫 Blocking 函式的同时,依旧能够处理其
它讯息 (Messages),包括Keyboard 及 Mouse 的事件;但是此时应用程式除了
能用 WSACancelBlockingCall() 函式来取消原先之 locking 动作或用
WSAIsBlocking() 函式来检查目前是否有 Blocking 动作仍在进行外,
「不可以」在原先呼叫之 Blocking 函式完成前再呼叫其它的 Socket 函式,
不然後者会失败且产生WSAINPROGRESS 的错误。
使用者呼叫 WSACancelBlockingCall()函式所取消的 Blocking 动作若不是
accept() 或者 select()的话,那麽之後唯一可呼叫的 Socket 函式只有
closesocket(),因为取消一个 Socket 的Blocking 动作会使其变成未定
(Indeterminate) 状态。