我应该如何关闭和取消注册注册到选择器的套接字

时间:2017-12-21 15:21:19

标签: python sockets

在我的代码中,我打开一个套接字,我注册到EpollSelector。然后文档说明了

  

文件对象在关闭之前应取消注册。

如何使用以下代码保证:

with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as a_socket:
    a_socket.bind(socket_addr)
    a_socket.listen(1)

    epoll = select.epoll()
    epoll.register(a_socket, select.EPOLLIN, select.EPOLLERR, select.EPOLLHUP)

    do_stuff()

    epoll.unregister(a_socket)

如果do_stuff引发异常,我怎样才能确保在套接字关闭之前发生取消注册?如果我在关闭套接字之前没有取消注册会出现什么问题?

1 个答案:

答案 0 :(得分:0)

是否可以用try / except包装do_stuff()?

try:
  do_stuff()
except Exception as e:
  print("There was an error!")
epoll.unregister(a_socket)