AzurLaneAutoScript
AzurLaneAutoScript copied to clipboard
随机终止Alas调度器会出现端口无法释放的问题
在提问之前...
- [x] 我已经搜索了现有的 issues
- [x] 我在提问题之前至少花费了 5 分钟来思考和准备
- [x] 我已经阅读了 Wiki 中的 常见问题(FAQ)
- [x] 我正在使用最新版的 Alas
描述你的问题
终止调度器之后,调整了一下任务列表,然后再次打开Alas出现端口占用问题 重启模拟器或者游戏均可解决此问题 系统环境: Linux ChromeBox 6.8.0-60-generic 22.04.1-Ubuntu Intel i7-8800U / 8 GB RAM / 250GB SSD 使用的模拟器: redroid_11 x86_64(Docker) PORT MAP: 0.0.0.0:20304 20304/tcp :::20304 20304/tcp 0.0.0.0:5555 5555/tcp :::5555 5555/tcp 0.0.0.0:7903 7903/tcp :::7903 7903/tcp
如何复现
1.随机在一个时间停止调度器 2.短暂等待后重启调度器 3.无法排除端口占用,最后报错
预期行为
释放旧的占用端口,然后继续任务
相关 Logs
════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
EVENTD
════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
INFO 11:09:57.857 │ Connecting to unknown device, using host 127.0.0.1
INFO 11:09:57.912 │ [Device Orientation] 2 (HOME key on the top)
INFO 11:09:57.919 │ Reuse reverse: ReverseItem(remote='tcp:7903', local='tcp:20036')
INFO 11:09:57.923 │ Reverse server listening on 127.0.0.1:20036, client can send data to 127.0.0.1:7903
ERROR 11:09:57.927 │ OSError: [Errno 98] Address already in use
╭───────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────╮
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/method/adb.py:32 in retry_wrapper │
│ │
│ 30 │ │ │ │ │ time.sleep(retry_sleep(_)) │
│ 31 │ │ │ │ │ init() │
│ ❱ 32 │ │ │ │ return func(self, *args, **kwargs) │
│ 33 │ │ │ # Can't handle │
│ 34 │ │ │ except RequestHumanTakeover: │
│ │
│ ╭──────────────────────────── locals ─────────────────────────────╮ │
│ │ _ = 0 │ │
│ │ args = () │ │
│ │ e = OSError(98, 'Address already in use') │ │
│ │ func = <function Adb.screenshot_adb_nc at 0x7f566c9f3dd0> │ │
│ │ init = None │ │
│ │ kwargs = {} │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ ╰─────────────────────────────────────────────────────────────────╯ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/method/adb.py:176 in screenshot_adb_nc │
│ │
│ 174 │ @retry │
│ 175 │ def screenshot_adb_nc(self): │
│ ❱ 176 │ │ data = self.adb_shell_nc(['screencap']) │
│ 177 │ │ if len(data) < 500: │
│ 178 │ │ │ logger.warning(f'Unexpected screenshot: {data}') │
│ │
│ ╭─────────────────────────── locals ────────────────────────────╮ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ ╰───────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/connection.py:535 in adb_shell_nc │
│ │
│ 533 │ │ """ │
│ 534 │ │ # Server start listening │
│ ❱ 535 │ │ server = self.reverse_server │
│ 536 │ │ server.settimeout(timeout) │
│ 537 │ │ # Client send data, waiting for server accept │
│ │
│ ╭────────────────────────────── locals ───────────────────────────────╮ │
│ │ chunk_size = 262144 │ │
│ │ cmd = ['screencap'] │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ timeout = 5 │ │
│ ╰─────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/base/decorator.py:97 in __get__ │
│ │
│ 95 │ │ │ return self │
│ 96 │ │ │
│ ❱ 97 │ │ value = obj.__dict__[self.func.__name__] = self.func(obj) │
│ 98 │ │ return value │
│ 99 │
│ │
│ ╭──────────────────────────────── locals ─────────────────────────────────╮ │
│ │ cls = <class 'module.device.device.Device'> │ │
│ │ obj = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ self = <module.base.decorator.cached_property object at 0x7f566c9f1190> │ │
│ ╰─────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/connection.py:476 in reverse_server │
│ │
│ 474 │ │ │ │ │ f'client can send data to {host_port[2]}:{host_port[3]}') │
│ 475 │ │ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) │
│ ❱ 476 │ │ server.bind(host_port[:2]) │
│ 477 │ │ server.settimeout(5) │
│ 478 │ │ server.listen(5) │
│ │
│ ╭──────────────────────────────────────────────────── locals ─────────────────────────────────────────────────────╮ │
│ │ host_port = ('127.0.0.1', 20036, '127.0.0.1', 7903) │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ server = <socket.socket fd=23, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, │ │
│ │ laddr=('0.0.0.0', 0)> │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
OSError: [Errno 98] Address already in use
INFO 11:09:58.075 │ ^ 10 1280 720 255
INFO 11:09:58.303 │ Connecting to unknown device, using host 127.0.0.1
INFO 11:09:58.307 │ $ 255
INFO 11:09:58.311 │ MaaTouch stream connected
INFO 11:09:58.313 │ Reuse reverse: ReverseItem(remote='tcp:7903', local='tcp:20036')
INFO 11:09:58.316 │ max_contact: 10; max_x: 1280; max_y: 720; max_pressure: 255
INFO 11:09:58.319 │ Reverse server listening on 127.0.0.1:20036, client can send data to 127.0.0.1:7903
ERROR 11:09:58.322 │ OSError: [Errno 98] Address already in use
╭───────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────╮
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/method/adb.py:32 in retry_wrapper │
│ │
│ 30 │ │ │ │ │ time.sleep(retry_sleep(_)) │
│ 31 │ │ │ │ │ init() │
│ ❱ 32 │ │ │ │ return func(self, *args, **kwargs) │
│ 33 │ │ │ # Can't handle │
│ 34 │ │ │ except RequestHumanTakeover: │
│ │
│ ╭───────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │ _ = 1 │ │
│ │ args = () │ │
│ │ e = OSError(98, 'Address already in use') │ │
│ │ func = <function Adb.screenshot_adb_nc at 0x7f566c9f3dd0> │ │
│ │ init = <function retry.<locals>.retry_wrapper.<locals>.init at 0x7f56ac710cb0> │ │
│ │ kwargs = {} │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────╯ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/method/adb.py:176 in screenshot_adb_nc │
│ │
│ 174 │ @retry │
│ 175 │ def screenshot_adb_nc(self): │
│ ❱ 176 │ │ data = self.adb_shell_nc(['screencap']) │
│ 177 │ │ if len(data) < 500: │
│ 178 │ │ │ logger.warning(f'Unexpected screenshot: {data}') │
│ │
│ ╭─────────────────────────── locals ────────────────────────────╮ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ ╰───────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/connection.py:535 in adb_shell_nc │
│ │
│ 533 │ │ """ │
│ 534 │ │ # Server start listening │
│ ❱ 535 │ │ server = self.reverse_server │
│ 536 │ │ server.settimeout(timeout) │
│ 537 │ │ # Client send data, waiting for server accept │
│ │
│ ╭────────────────────────────── locals ───────────────────────────────╮ │
│ │ chunk_size = 262144 │ │
│ │ cmd = ['screencap'] │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ timeout = 5 │ │
│ ╰─────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/base/decorator.py:97 in __get__ │
│ │
│ 95 │ │ │ return self │
│ 96 │ │ │
│ ❱ 97 │ │ value = obj.__dict__[self.func.__name__] = self.func(obj) │
│ 98 │ │ return value │
│ 99 │
│ │
│ ╭──────────────────────────────── locals ─────────────────────────────────╮ │
│ │ cls = <class 'module.device.device.Device'> │ │
│ │ obj = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ self = <module.base.decorator.cached_property object at 0x7f566c9f1190> │ │
│ ╰─────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/connection.py:476 in reverse_server │
│ │
│ 474 │ │ │ │ │ f'client can send data to {host_port[2]}:{host_port[3]}') │
│ 475 │ │ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) │
│ ❱ 476 │ │ server.bind(host_port[:2]) │
│ 477 │ │ server.settimeout(5) │
│ 478 │ │ server.listen(5) │
│ │
│ ╭──────────────────────────────────────────────────── locals ─────────────────────────────────────────────────────╮ │
│ │ host_port = ('127.0.0.1', 20036, '127.0.0.1', 7903) │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ server = <socket.socket fd=21, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, │ │
│ │ laddr=('0.0.0.0', 0)> │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
OSError: [Errno 98] Address already in use
INFO 11:09:59.663 │ Connecting to unknown device, using host 127.0.0.1
INFO 11:09:59.672 │ Reuse reverse: ReverseItem(remote='tcp:7903', local='tcp:20036')
INFO 11:09:59.681 │ Reverse server listening on 127.0.0.1:20036, client can send data to 127.0.0.1:7903
ERROR 11:09:59.690 │ OSError: [Errno 98] Address already in use
╭───────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────╮
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/method/adb.py:32 in retry_wrapper │
│ │
│ 30 │ │ │ │ │ time.sleep(retry_sleep(_)) │
│ 31 │ │ │ │ │ init() │
│ ❱ 32 │ │ │ │ return func(self, *args, **kwargs) │
│ 33 │ │ │ # Can't handle │
│ 34 │ │ │ except RequestHumanTakeover: │
│ │
│ ╭───────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │ _ = 2 │ │
│ │ args = () │ │
│ │ e = OSError(98, 'Address already in use') │ │
│ │ func = <function Adb.screenshot_adb_nc at 0x7f566c9f3dd0> │ │
│ │ init = <function retry.<locals>.retry_wrapper.<locals>.init at 0x7f56b41faef0> │ │
│ │ kwargs = {} │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────╯ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/method/adb.py:176 in screenshot_adb_nc │
│ │
│ 174 │ @retry │
│ 175 │ def screenshot_adb_nc(self): │
│ ❱ 176 │ │ data = self.adb_shell_nc(['screencap']) │
│ 177 │ │ if len(data) < 500: │
│ 178 │ │ │ logger.warning(f'Unexpected screenshot: {data}') │
│ │
│ ╭─────────────────────────── locals ────────────────────────────╮ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ ╰───────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/connection.py:535 in adb_shell_nc │
│ │
│ 533 │ │ """ │
│ 534 │ │ # Server start listening │
│ ❱ 535 │ │ server = self.reverse_server │
│ 536 │ │ server.settimeout(timeout) │
│ 537 │ │ # Client send data, waiting for server accept │
│ │
│ ╭────────────────────────────── locals ───────────────────────────────╮ │
│ │ chunk_size = 262144 │ │
│ │ cmd = ['screencap'] │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ timeout = 5 │ │
│ ╰─────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/base/decorator.py:97 in __get__ │
│ │
│ 95 │ │ │ return self │
│ 96 │ │ │
│ ❱ 97 │ │ value = obj.__dict__[self.func.__name__] = self.func(obj) │
│ 98 │ │ return value │
│ 99 │
│ │
│ ╭──────────────────────────────── locals ─────────────────────────────────╮ │
│ │ cls = <class 'module.device.device.Device'> │ │
│ │ obj = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ self = <module.base.decorator.cached_property object at 0x7f566c9f1190> │ │
│ ╰─────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/connection.py:476 in reverse_server │
│ │
│ 474 │ │ │ │ │ f'client can send data to {host_port[2]}:{host_port[3]}') │
│ 475 │ │ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) │
│ ❱ 476 │ │ server.bind(host_port[:2]) │
│ 477 │ │ server.settimeout(5) │
│ 478 │ │ server.listen(5) │
│ │
│ ╭──────────────────────────────────────────────────── locals ─────────────────────────────────────────────────────╮ │
│ │ host_port = ('127.0.0.1', 20036, '127.0.0.1', 7903) │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ server = <socket.socket fd=23, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, │ │
│ │ laddr=('0.0.0.0', 0)> │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
OSError: [Errno 98] Address already in use
INFO 11:10:03.058 │ Connecting to unknown device, using host 127.0.0.1
INFO 11:10:03.066 │ Reuse reverse: ReverseItem(remote='tcp:7903', local='tcp:20036')
INFO 11:10:03.077 │ Reverse server listening on 127.0.0.1:20036, client can send data to 127.0.0.1:7903
ERROR 11:10:03.085 │ OSError: [Errno 98] Address already in use
╭───────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────╮
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/method/adb.py:32 in retry_wrapper │
│ │
│ 30 │ │ │ │ │ time.sleep(retry_sleep(_)) │
│ 31 │ │ │ │ │ init() │
│ ❱ 32 │ │ │ │ return func(self, *args, **kwargs) │
│ 33 │ │ │ # Can't handle │
│ 34 │ │ │ except RequestHumanTakeover: │
│ │
│ ╭───────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │ _ = 3 │ │
│ │ args = () │ │
│ │ e = OSError(98, 'Address already in use') │ │
│ │ func = <function Adb.screenshot_adb_nc at 0x7f566c9f3dd0> │ │
│ │ init = <function retry.<locals>.retry_wrapper.<locals>.init at 0x7f56ac6398c0> │ │
│ │ kwargs = {} │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────╯ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/method/adb.py:176 in screenshot_adb_nc │
│ │
│ 174 │ @retry │
│ 175 │ def screenshot_adb_nc(self): │
│ ❱ 176 │ │ data = self.adb_shell_nc(['screencap']) │
│ 177 │ │ if len(data) < 500: │
│ 178 │ │ │ logger.warning(f'Unexpected screenshot: {data}') │
│ │
│ ╭─────────────────────────── locals ────────────────────────────╮ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ ╰───────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/connection.py:535 in adb_shell_nc │
│ │
│ 533 │ │ """ │
│ 534 │ │ # Server start listening │
│ ❱ 535 │ │ server = self.reverse_server │
│ 536 │ │ server.settimeout(timeout) │
│ 537 │ │ # Client send data, waiting for server accept │
│ │
│ ╭────────────────────────────── locals ───────────────────────────────╮ │
│ │ chunk_size = 262144 │ │
│ │ cmd = ['screencap'] │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ timeout = 5 │ │
│ ╰─────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/base/decorator.py:97 in __get__ │
│ │
│ 95 │ │ │ return self │
│ 96 │ │ │
│ ❱ 97 │ │ value = obj.__dict__[self.func.__name__] = self.func(obj) │
│ 98 │ │ return value │
│ 99 │
│ │
│ ╭──────────────────────────────── locals ─────────────────────────────────╮ │
│ │ cls = <class 'module.device.device.Device'> │ │
│ │ obj = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ self = <module.base.decorator.cached_property object at 0x7f566c9f1190> │ │
│ ╰─────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/connection.py:476 in reverse_server │
│ │
│ 474 │ │ │ │ │ f'client can send data to {host_port[2]}:{host_port[3]}') │
│ 475 │ │ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) │
│ ❱ 476 │ │ server.bind(host_port[:2]) │
│ 477 │ │ server.settimeout(5) │
│ 478 │ │ server.listen(5) │
│ │
│ ╭──────────────────────────────────────────────────── locals ─────────────────────────────────────────────────────╮ │
│ │ host_port = ('127.0.0.1', 20036, '127.0.0.1', 7903) │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ server = <socket.socket fd=21, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, │ │
│ │ laddr=('0.0.0.0', 0)> │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
OSError: [Errno 98] Address already in use
INFO 11:10:06.503 │ Connecting to unknown device, using host 127.0.0.1
INFO 11:10:06.508 │ Reuse reverse: ReverseItem(remote='tcp:7903', local='tcp:20036')
INFO 11:10:06.513 │ Reverse server listening on 127.0.0.1:20036, client can send data to 127.0.0.1:7903
ERROR 11:10:06.517 │ OSError: [Errno 98] Address already in use
╭───────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────╮
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/method/adb.py:32 in retry_wrapper │
│ │
│ 30 │ │ │ │ │ time.sleep(retry_sleep(_)) │
│ 31 │ │ │ │ │ init() │
│ ❱ 32 │ │ │ │ return func(self, *args, **kwargs) │
│ 33 │ │ │ # Can't handle │
│ 34 │ │ │ except RequestHumanTakeover: │
│ │
│ ╭───────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │ _ = 4 │ │
│ │ args = () │ │
│ │ e = OSError(98, 'Address already in use') │ │
│ │ func = <function Adb.screenshot_adb_nc at 0x7f566c9f3dd0> │ │
│ │ init = <function retry.<locals>.retry_wrapper.<locals>.init at 0x7f56b41faef0> │ │
│ │ kwargs = {} │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────╯ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/method/adb.py:176 in screenshot_adb_nc │
│ │
│ 174 │ @retry │
│ 175 │ def screenshot_adb_nc(self): │
│ ❱ 176 │ │ data = self.adb_shell_nc(['screencap']) │
│ 177 │ │ if len(data) < 500: │
│ 178 │ │ │ logger.warning(f'Unexpected screenshot: {data}') │
│ │
│ ╭─────────────────────────── locals ────────────────────────────╮ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ ╰───────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/connection.py:535 in adb_shell_nc │
│ │
│ 533 │ │ """ │
│ 534 │ │ # Server start listening │
│ ❱ 535 │ │ server = self.reverse_server │
│ 536 │ │ server.settimeout(timeout) │
│ 537 │ │ # Client send data, waiting for server accept │
│ │
│ ╭────────────────────────────── locals ───────────────────────────────╮ │
│ │ chunk_size = 262144 │ │
│ │ cmd = ['screencap'] │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ timeout = 5 │ │
│ ╰─────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/base/decorator.py:97 in __get__ │
│ │
│ 95 │ │ │ return self │
│ 96 │ │ │
│ ❱ 97 │ │ value = obj.__dict__[self.func.__name__] = self.func(obj) │
│ 98 │ │ return value │
│ 99 │
│ │
│ ╭──────────────────────────────── locals ─────────────────────────────────╮ │
│ │ cls = <class 'module.device.device.Device'> │ │
│ │ obj = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ self = <module.base.decorator.cached_property object at 0x7f566c9f1190> │ │
│ ╰─────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/kawakaze/AzurLaneAutoScript/module/device/connection.py:476 in reverse_server │
│ │
│ 474 │ │ │ │ │ f'client can send data to {host_port[2]}:{host_port[3]}') │
│ 475 │ │ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) │
│ ❱ 476 │ │ server.bind(host_port[:2]) │
│ 477 │ │ server.settimeout(5) │
│ 478 │ │ server.listen(5) │
│ │
│ ╭──────────────────────────────────────────────────── locals ─────────────────────────────────────────────────────╮ │
│ │ host_port = ('127.0.0.1', 20036, '127.0.0.1', 7903) │ │
│ │ self = <module.device.device.Device object at 0x7f56ac36de50> │ │
│ │ server = <socket.socket fd=23, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, │ │
│ │ laddr=('0.0.0.0', 0)> │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
OSError: [Errno 98] Address already in use
CRITICAL 11:10:06.890 │ Retry screenshot_adb_nc() failed
CRITICAL 11:10:06.892 │ Request human takeover
INFO 11:10:07.167 │ Push notify success
截图
No response
还有别的吗?
No response