什么是Socket阻塞与非阻塞方式?(100分)

  • 主题发起人 主题发起人 lxggc
  • 开始时间 开始时间
[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) 状态。
 
真正的骗分题:
5种I/O模式
阻塞:默认情况下,一个套接字建立以后的模式就是阻塞模式。
非阻塞:“当我请求的I/O操作不能够马上完成,你想让我的进程进行休眠,不要这样做,请
马上返回一个错误给我”
I/O多路复用:
信号驱动i/o模式
异步i/o模式
 
阻塞是串行的,非阻塞是中断的
 
多人接受答案了。
 
后退
顶部