【问题标题】:Close UDP socket with no socket.close()关闭没有 socket.close() 的 UDP 套接字
【发布时间】:2013-01-03 14:49:39
【问题描述】:

有一个打开UDP socket

的python程序
receiveSock = socket(AF_INET, SOCK_DGRAM)
receiveSock.bind(("", portReceive))

有时会发生程序失败或者我在运行时终止它并且它没有达到

receiveSock.close()

所以下次我尝试运行这个程序时,我会得到

receiveSock.bind(("",portReceive))
  File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use

如何使用 shell 命令(或任何其他有用的想法)关闭此套接字?

【问题讨论】:

    标签: python sockets shell ubuntu


    【解决方案1】:

    你有两个选择:

    try:
       # your socket operations
    finally:
       # close your socket
    

    或者,对于较新版本的 Python:

    with open_the_socket() as the_socket:
       # do stuff with the_socket
    

    with statement 将在块完成或程序退出时关闭套接字。

    【讨论】:

    • 我考虑过finally,但在中断关闭(crl+Z)中并没有进入finally
    • CTRL+Z 在 UNIX/Linux 中暂停任务;所以你不会期望套接字被关闭。
    • CTRL+C 也不要进入finally
    • @URL87 嗯?确实如此。如果它不检查您的信号处理过滤器(父外壳)和您的假设。证明:pastebin.com/iY8LQDyK
    猜你喜欢
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多