首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gen_tcp:发送/2阻塞吗?

gen_tcp:发送/2阻塞吗?
EN

Stack Overflow用户
提问于 2014-04-17 20:16:34
回答 1查看 468关注 0票数 0

gen_tcp:send()是异步的吗?假设我将使用gen_tcp: send /2发送一些字节数组。

( a)立即

( b)当数据到达目标的内部缓冲区时

( c)当目标从缓冲区获取数据时

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-18 04:58:07

gen_tcp:send/2是同步的。这意味着呼叫只在给定的数据包真正发送之后才返回。通常情况下,如果TCP窗口是完全的gen_tcp:send/2块,直到数据被发送,这种情况就会立即发生。因此,这意味着理论上调用可以无限阻塞(例如,当接收方不从其一侧的套接字读取数据时)。幸运的是,有一些选择可以避免这种情况。对于套接字,有两个选项{send_timeout, Integer}{send_timeout_close, Boolean},它们可以由调用inet:setopts/2指定。第一个允许指定等待发送操作的最长时间。

当超出限制时,发送操作将返回{error, timeout}。该选项的默认值是infinity (这是无限块的原因)。同样不幸的是,如果返回{error, timeout},将发送多少数据是未知的。在这种情况下,最好关闭插座。如果第二个选项{send_timeout_close, Boolean}设置为true,那么如果发生{error, timeout},套接字将自动关闭。

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

https://stackoverflow.com/questions/23142637

复制
相关文章

相似问题

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