首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Socket.Blocking的目的

Socket.Blocking的目的
EN

Stack Overflow用户
提问于 2016-10-14 02:25:30
回答 1查看 3K关注 0票数 2

我对C#中的套接字使用Begin/EndAccept/发送/接收方法已有一段时间了,但直到最近才发现System.Net.Sockets的阻塞bool选项

这是一个更好的选择吗?如果没有,指定您的套接字是否应该阻塞的目的是什么?它仅仅是一个有用的指标,说明开发人员是否选择了实现阻塞/非阻塞方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-14 04:53:23

试图在阻塞套接字上调用接收调用意味着在数据到达之前调用不会返回。当使用阻塞套接字时,线程会被有效地停止,直到数据可用为止。因此,如果您尝试在Winforms应用程序的UI线程上执行套接字I/O,您的UI将在数据到达之前没有响应和冻结。

非阻塞套接字允许您的代码做其他事情。如果您在非阻塞套接字上调用Receive,如果没有可用的数据,它将立即返回。非阻塞套接字通常与周期性轮询机制、"select“样式等待调用或其他通知机制结合使用,以指示数据可用。.NET还提供了套接字上的BeginReceive方法作为另一种选择。

在“阻塞”和“非阻塞”之间的选择是一种设计选择。选择要么影响线程模型(或者线程模型影响决策)。两者都有设计意义。

早期版本的.NET没有提供BeginReceive IIRC。异步等待直到很久以后才出现在.NET版本中。传统的套接字模型在大多数平台上只是“发送”和"recv“,可以选择设置非阻塞模式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40033946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档