DNS服务器客户端通信p

2024-05-18 05:37:22 发布

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

我需要写一篇关于DNS如何工作的论文,并用python构建一个小型但功能强大的DNS服务器。在

我有一个简单的UDP套接字服务器,它在收到包时打开一个线程,如下所示:

while 1:
  try:
    stream, addr = serversocket.recvfrom(buffr)
    threading.Thread(target=handler, args=(stream, addr, threading.activeCount(),)).start()
  except:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    except_catch(exc_type.__name__, exc_value, exc_traceback, threading.current_thread().name)

handler函数只是尝试查找内存中请求的记录,如果没有,它将执行另一个函数,该函数在另一个服务器上运行dns查询,以获取他没有的记录。这有点像一个故障保险,我的问题在哪里。在

^{pr2}$

你看我还没完成,但我已经有问题了。 有时,此函数会手动执行,线程将永远无法完成,而不在错误日志中给出任何错误。 我已经测试过了,错误日志应该捕捉到孩子抛出的所有错误。 我有一个简单的客户端,程序是发送一个随机的请求,每一个设定的时间,似乎没有模式,当孩子挂起。 经过大约24小时的测试,我只剩下1-3个僵尸线程。

如果您想知道异常函数是什么样子的:

def except_catch(type, value, track, thread=None):
  if type != "SystemExit":
    import traceback

    rawreport = traceback.format_exception(type, value, track)
    report = "\n" . join(rawreport)

    errorlog = open(error_log_path + "/errors.log", "a")

    if thread != None:
      errorlog.write("Exception in thread: " + thread + "\n\n")

    errorlog.write(("%s\n" + "-" * 30 + "\n\n") % report)

    errorlog.close()
sys.excepthook = except_catch

Tags: 函数服务器streamvaluednstype错误线程
1条回答
网友
1楼 · 发布于 2024-05-18 05:37:22

我会检查RFC,因为这是协议的确切规范。DNS的问题是,存在多个RFC。作为一个简单的开始,我将检查包含基本内容的RFC 1035。如果需要高级功能,请检查其他相关的RFC。在

相关问题 更多 >