Python套接字异常处理在第一次迭代中不会引发任何错误

时间:2018-12-22 11:40:35

标签: python syslog

我正在尝试编写一个简单的syslog客户端。

这很好用,并且在syslog服务器意外关闭时遇到异常。现在,我在调试时发现的唯一问题如下:

当我关闭系统日志服务器时,当我尝试发送消息时,它不会立即引发异常。它仅在系统日志服务器关闭时在下一次迭代后引发异常。 所以基本上我会释放一条消息。

请参见下面的示例/步骤:

1。)syslog服务器启动,我从for循环发送了第一条消息“ test1”,这是成功的。

2。)我关闭了系统日志服务器,现在我从for循环中发送第二条消息“ test2”(调试时)。什么都没有发生,也不例外!

3。)我发送了第三条消息“ test3”,现在引发了异常。

这怎么可能?为什么在系统日志服务器关闭时它在第一次迭代中没有引发异常?

class Syslog:
  def __init__(self,host="localhost",port=514,facility=Facility.DAEMON):
    self.host = host
    self.port = port
    self.facility = facility
    self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  def connect(self):
    try:
        self.socket.connect((self.host, self.port))
    except Exception as e:
        print("failed setting up connection")


  def send(self, message,level):
    data = "<%d>%s" % (level + self.facility*8, message + "\n")
    try:
        self.socket.sendall(data.encode('utf-8'))
    except Exception as e:
        print("send failed")

#if __name__ == '__main__':
syslog1 = Syslog(host='HOSTIPADDRESS-NAME')
syslog1.connect()
messages = ["test1","test2","test3","test4","test5","test6","test7"]

for message in messages:
    syslog1.send(message,Level.WARNING)

0 个答案:

没有答案