你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

Netty为什么不是信号量驱动IO

2021/12/13 19:43:11

信号驱动式IO对于TCP套接字产生的作用不大。因为该信号在TCP套接字中产生的过于频繁。

以下条件均会导致对一个TCP套接字产生SIGIO信号:

  • 监听套接字上某个连接请求已经完成;
  • 某个断连请求已经发起;
  • 某个断连请求已经完成;
  • 某个连接之半已经关闭;
  • 数据到达套接字;
  • 数据已经从套接字发送走;
  • 发生某个异步错误。

这么多条件都会触发SIGIO信号,导致应用进程对该信号一头雾水,没法确定套接字具体发生了什么事情。不过可以对TCP监听套接字可以使用SIGIO,因为对于监听套接字,产生SIGIO信号的唯一条件是某个新连接完成了。这样就可以在SIGIO信号处理函数中获取新连接了。

UDP套接字中,只有以下两个条件会产生SIGIO信号:

  • 数据报到达套接字;
  • 套接字上发生异步错误。

所以,针对UDP套接字产生的SIGIO信号,我们只要调用recvfrom读入到达的数据,或者获取发生的异步错误就可以了。