写UDP能阻止套接字吗?

2024-09-27 21:26:22 发布

您现在位置:Python中文网/ 问答频道 /正文

如果是,在什么条件下?或者,换一种说法,在twisted中运行此代码是否安全:

class StatsdClient(AbstractStatsdClient):
  def __init__(self, host, port):
    super(StatsdClient, self).__init__()
    self.addr = (host, port)
    self.server_hostname = socket.gethostname()
    self.udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

  def incr(self, stat, amount=1):
    data = {"%s|c" % stat: amount}
    self._send(data)

  def _send(self, data):
    for stat, value in data.iteritems():
      self.udp_sock.sendto("servers.%s.%s:%s" % (self.server_hostname, stat, value), self.addr)

Tags: selfhostdataserverinitportdefsocket
2条回答

如果网络接口出现故障,它可能会失败,例如:

[enedown]用于到达目的地的本地网络接口已关闭。在

是的,奇怪的是,UDP套接字可以阻塞。在

发生这种情况的条件基本上是,某个地方的缓冲区被填满,你的操作系统决定是时候阻止某些东西了。这些可以说是内核错误,但我在这里和那里都见过。有时在模糊、不可能重现的条件下,您肯定可以得到EWOULDBLOCK。在

为什么要在Twisted中执行此操作而不是使用Twisted的built-in UDP support?在

相关问题 更多 >

    热门问题