关上插座后如何打开?

2024-04-27 00:03:23 发布

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

我试着打开插座

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

发送消息,然后关闭它

sock.close()

但我不知道怎么再打开它。我使用UDP套接字插座连接()是一个TCP命令,我想。。。至少我试过了,但还是出错了。你知道吗


Tags: 命令消息closesocket插座tcpsockudp
1条回答
网友
1楼 · 发布于 2024-04-27 00:03:23

不能重新打开套接字。正如^{}所解释的:

The underlying system resource (e.g. a file descriptor) is also closed when all file objects from makefile() are closed. Once that happens, all future operations on the socket object will fail.

这是BSD套接字模型固有的:关闭套接字意味着内核丢弃与该套接字相关的所有资源并释放文件描述符。正如POSIX所定义的:

If fildes refers to a socket, close() shall cause the socket to be destroyed.

如果您再次尝试使用该文件描述符,如果幸运的话,您会得到一个EBADFD错误;如果不幸运的话,您会得到一些完全不同的套接字或文件,它们重用了相同的数字。事实上,这适用于所有文件描述符,而不仅仅是套接字。再次引用POSIX:

Once a file is closed, the file descriptor no longer exists, since the integer corresponding to it no longer refers to a file.


当然,你能做的就是创建一个全新的套接字,就像你创建第一个一样:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

您可能会得到一个不同的文件描述符,但对于大多数套接字代码来说,这并没有什么区别。你知道吗


当然,你也可以不关插座。不管您出于什么原因想要关闭这个套接字,您想要再次使用它的事实意味着您可能错了。你知道吗

相关问题 更多 >