首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地进行单元测试来清理套接字

如何正确地进行单元测试来清理套接字
EN

Stack Overflow用户
提问于 2012-10-16 02:41:46
回答 1查看 387关注 0票数 2

我最近一直在使用一些套接字,在使用侦听套接字编写一些单元测试用例时,我反复得到error: [Errno 98] Address already in use

这是一些显示错误的示例代码。

代码语言:javascript
复制
import unittest
import socket

class TestUnit(unittest.TestCase):
    def setUp(self):
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.bind((socket.gethostname(), 10000))
        self.socket.listen(10)
        self.addCleanup(self.clean)

    def test_nothing(self):
        self.assertEqual(False, False)

    def test_something(self):
        self.assertEqual(True, True)

    def clean(self):
        self.socket.close()

它似乎发生在其中一个测试抛出异常的时候。没有任何异常,它可以按预期工作。但这在某种程度上让测试变得无用,因为在第一个抛出异常的测试之后,所有的测试都会抛出异常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-16 02:44:52

代码语言:javascript
复制
socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) 

应该会有帮助

基本上,关闭的套接字不会立即被堆栈释放。因此,如果您尝试立即重用它(即使在只有一个绑定套接字,但关闭并重新启动应用程序的情况下也是如此),您将看到相同的错误。REUSEADDR允许再次绑定同一套接字。

但是,如果您的套接字处于定时等待状态,并且您尝试相同的目标,则它将失败。

您还应该阅读此套接字选项的手册页,以了解它的限制。

SO_REUSEADDR on SO

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12901941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档