关于Blocking Winsock的解释

Damn_boy 2011-05-17 08:34:22
msdn上一段话看的不是很明白
麻烦理解透彻的给翻译一下。。
谢谢

最好能给个例子吧。

When issuing a blocking Winsock call such as listen, Winsock may need to wait for a network event before the call can complete.
Winsock performs an alertable wait in this situation, which can be interrupted by an asynchronous procedure call (APC) scheduled on the same thread.
Issuing another blocking Winsock call inside an APC that interrupted an ongoing blocking Winsock call on the same thread will lead to undefined behavior, and must never be attempted by Winsock clients.
...全文
58 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdzfjfhnui 2011-05-20
  • 打赏
  • 举报
回复

就是说如果套接字为同步模式,当你调用listen函数时(假如叫ListenSocket),当前调用线程(假如叫:TA)将进入休眠状态,并且为alertable状态,这种状态下,如果其他线程(假如叫:TB)对TA线程的APC队列中插入一个APC项,此时TA线程将被唤醒,它将从APC队列中出队APC项(这个项就是一个回调函数),并马上执行APC例程,然后继续进入休眠,并且为alertable状态. 如果TB向TA插入的APC例程中又对ListenSocket套接字进行阻塞调用,这种情况下将导致TA线程行为不可预测,你决不要这么做(就是说不要在那个APC例程中对ListenSocket进行其他阻塞调用操作).
jdzfjfhnui 2011-05-20
  • 打赏
  • 举报
回复

就是说如果套接字为同步模式,当你调用listen函数时(假如叫ListenSocket),当前调用线程(假如叫:TA)将进入休眠状态,并且为alertable状态,这种状态下,如果其他线程(假如叫:TB)对TB线程的APC队列中插入一个APC项,此时TA线程将被唤醒,它将从APC队列中出队APC项(这个项就是一个回调函数),执行APC例程后,然后继续进入休眠,并且为alertable状态. 如果TB向TA插入的APC例程中又对ListenSocket套接字进行阻塞调用,这种情况下将导致TA线程行为不可预测,你决不要这么做(就是说不要在那个APC例程中对ListenSocket进行其他阻塞调用操作).

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧