altdesktop / i3ipc-python

🐍 An improved Python library to control i3wm and sway.
http://i3ipc-python.readthedocs.io
BSD 3-Clause "New" or "Revised" License
851 stars 109 forks source link

auto_reconnect fails after a reload and restart #148

Closed rvalieris closed 4 years ago

rvalieris commented 4 years ago

if you reload and restart i3, the auto_reconnect fails:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/site-packages/i3ipc/connection.py", line 518, in main
    raise loop_exception
  File "/usr/lib/python3.8/site-packages/i3ipc/connection.py", line 489, in main
    self._event_socket_setup()
  File "/usr/lib/python3.8/site-packages/i3ipc/connection.py", line 417, in _event_socket_setup
    self._subscribe(self.subscriptions)
  File "/usr/lib/python3.8/site-packages/i3ipc/connection.py", line 344, in _subscribe
    data = self._ipc_send(self._sub_socket, MessageType.SUBSCRIBE, json.dumps(events_obj))
  File "/usr/lib/python3.8/site-packages/i3ipc/connection.py", line 144, in _ipc_send
    data, msg_type = self._ipc_recv(sock)
  File "/usr/lib/python3.8/site-packages/i3ipc/connection.py", line 127, in _ipc_recv
    data = sock.recv(14)
ConnectionResetError: [Errno 104] Connection reset by peer

to reproduce:

  1. start a i3ipc program:
    import i3ipc
    i3 = i3ipc.Connection(auto_reconnect=True)
    i3.on(i3ipc.Event.WINDOW, lambda _,e: print(e))
    i3.main()
  2. reload i3
  3. restart i3

a restart by itself works, reload is fine too, but a restart (any time) after the reload causes the problem.

acrisci commented 4 years ago

Yeah I can reproduce this.

acrisci commented 4 years ago

It doesn't affect the asyncio connection.