如果是这样,在什么条件下?或者,换句话说,在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)
答案 0 :(得分:9)
是的,奇怪的是,UDP套接字可以阻止。
发生这种情况的条件基本上是,某些缓冲区填满,操作系统决定是否有时间阻止。这些可以说是内核错误,但我在这里和那里都看过它们。你有时可以在模糊,不可能重现的条件下获得EWOULDBLOCK
。
为什么要在Twisted中执行此操作而不是使用Twisted的built-in UDP support?
答案 1 :(得分:-1)
如果您的网络接口出现故障,可能会失败,例如:
[ENETDOWN]用于到达目的地的本地网络接口已关闭。