在运行while循环中使用三重套接字的函数时,出现OSError :(地址已在使用中)

用户名

import trio
from trio import socket

async def listen(host, port):
   while True:
        fullmsg = ""
        sock = socket.socket()
        await sock.bind((host, port))
        sock.listen()
        print(f'Awaiting Receive On {host}:{port}')
        conn, addr = await sock.accept()
        print(f'Connection Received From {addr[0]}:{addr[1]}')
        while True:
            try:
                msg = await conn.recv(8)
                if len(msg.decode().strip()) > 0:
                    print(f'Received {len(msg.strip())} bytes')
                    fullmsg += msg.decode().strip()
                else:
                    break
            except Exception as e:
                print(f'DEBUG: {e}')
        sock.shutdown(0)
        sock.close()
        print(fullmsg)


# function that runs the listen function:
async def create():
    async with trio.open_nursery() as nursery:
            nursery.start_soon(listen, '127.0.0.1', 6969)


# To run the program
trio.run(create)

我想在每次收到长度为0的消息时或在客户端关闭连接时一遍又一遍地运行该函数,但是当该函数完成第一个while循环的第一次迭代时,它给出OSError表示端口已在正在使用。我在循环结束时关闭并关闭了套接字,但我仍然不知道程序在哪里出错。

程序输出

Awaiting Receive On 127.0.0.1:6969
Connection Received From 127.0.0.1:37122
Received 8 bytes
Received 5 bytes
Hello, World!
Traceback (most recent call last):
  File "./ape.py", line 68, in <module>
    trio.run(create)
  File "/usr/local/lib/python3.8/dist-packages/trio/_core/_run.py", line 1804, in run
    raise runner.main_task_outcome.error
  File "./ape.py", line 59, in create
    nursery.start_soon(listen, '127.0.0.1', 6969)
  File "/usr/local/lib/python3.8/dist-packages/trio/_core/_run.py", line 730, in __aexit__
    raise combined_error_from_nursery
  File "./ape.py", line 15, in listen
    await sock.bind((host, port))
  File "/usr/local/lib/python3.8/dist-packages/trio/_socket.py", line 473, in bind
    return self._sock.bind(address)
OSError: [Errno 98] Address already in use
纳撒尼尔·史密斯

就像其他人在评论中说的那样,问题在于,在Unix-y平台上,SO_REUSEADDR如果要能够关闭监听套接字,然后立即打开绑定到同一端口的新套接字,则必须设置套接字选项。

但是请注意,在Windows上,永远不要设置该SO_REUSEADDR选项,因为在Windows上,默认情况下启用了所需的行为,并且SO_REUSEADDR将其重新定义为“关闭安全性”选项。

trio.socket是非常低级的,并公开了所有这些细节,因此,如果您想自己处理这些细节,则可以这样做。但是,大多数用户使用诸​​如的高级帮助程序会更好trio.serve_tcp,它将自动处理很多此类详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SocketException:地址已在使用中

来自分类Dev

vysper地址已在使用中

来自分类Dev

vysper地址已在使用中

来自分类Dev

套接字EADDRINUSE(地址已在使用中)

来自分类Dev

套接字错误:地址已在使用中

来自分类常见问题

SocketException:地址已在使用中MONGODB

来自分类常见问题

Docker错误绑定:地址已在使用中

来自分类常见问题

Nginx无法启动(地址已在使用中)

来自分类Dev

SocketConnector 8081-地址已在使用中

来自分类Dev

错误:[Errno 98]地址已在使用中

来自分类Dev

ssh隧道-绑定:地址已在使用中

来自分类Dev

Apache ActiveMQ Artemis地址已在使用中

来自分类Dev

Apache httpd:bind:地址已在使用中

来自分类Dev

使用Unix套接字获取“地址已在使用中”错误

来自分类Dev

Python套接字编程:异常后为“地址已在使用中”

来自分类Dev

Errno 98:地址已在使用中-Python套接字

来自分类Dev

FMX调试无法绑定地址,该地址已在使用中

来自分类Dev

在同一台PC中使用Java套接字传输文件时出现“ BindException:地址已在使用中”异常

来自分类Dev

JBoss启动时出错:地址已在使用中

来自分类Dev

编译ClojureScript时显示“地址已在使用中”

来自分类Dev

无法绑定到tcp://127.0.0.1:8080:地址已在使用中

来自分类Dev

Google Play成就“ IOException:地址已在使用中”

来自分类常见问题

启动Spring应用程序地址已在使用中

来自分类Dev

Postfix启动错误端口25:地址已在使用中

来自分类Dev

jekyll 2.2.0 | 错误:地址已在使用中-bind(2)

来自分类Dev

java.net.BindException:地址已在使用中:bind

来自分类Dev

ssh -L(错误:绑定:地址已在使用中)

来自分类Dev

Postfix启动错误端口25:地址已在使用中

来自分类Dev

Maven-java.net.BindException:地址已在使用中

Related 相关文章

  1. 1

    SocketException:地址已在使用中

  2. 2

    vysper地址已在使用中

  3. 3

    vysper地址已在使用中

  4. 4

    套接字EADDRINUSE(地址已在使用中)

  5. 5

    套接字错误:地址已在使用中

  6. 6

    SocketException:地址已在使用中MONGODB

  7. 7

    Docker错误绑定:地址已在使用中

  8. 8

    Nginx无法启动(地址已在使用中)

  9. 9

    SocketConnector 8081-地址已在使用中

  10. 10

    错误:[Errno 98]地址已在使用中

  11. 11

    ssh隧道-绑定:地址已在使用中

  12. 12

    Apache ActiveMQ Artemis地址已在使用中

  13. 13

    Apache httpd:bind:地址已在使用中

  14. 14

    使用Unix套接字获取“地址已在使用中”错误

  15. 15

    Python套接字编程:异常后为“地址已在使用中”

  16. 16

    Errno 98:地址已在使用中-Python套接字

  17. 17

    FMX调试无法绑定地址,该地址已在使用中

  18. 18

    在同一台PC中使用Java套接字传输文件时出现“ BindException:地址已在使用中”异常

  19. 19

    JBoss启动时出错:地址已在使用中

  20. 20

    编译ClojureScript时显示“地址已在使用中”

  21. 21

    无法绑定到tcp://127.0.0.1:8080:地址已在使用中

  22. 22

    Google Play成就“ IOException:地址已在使用中”

  23. 23

    启动Spring应用程序地址已在使用中

  24. 24

    Postfix启动错误端口25:地址已在使用中

  25. 25

    jekyll 2.2.0 | 错误:地址已在使用中-bind(2)

  26. 26

    java.net.BindException:地址已在使用中:bind

  27. 27

    ssh -L(错误:绑定:地址已在使用中)

  28. 28

    Postfix启动错误端口25:地址已在使用中

  29. 29

    Maven-java.net.BindException:地址已在使用中

热门标签

归档