Skip to content

Commit f263309

Browse files
committed
Fix #84: Debugging: ConnectionRefusedError with debugpy
Always use backlog of at least 1 for listener sockets. Improve launcher-related error messages in adapter.
1 parent 8fc238e commit f263309

File tree

2 files changed

+10
-15
lines changed

2 files changed

+10
-15
lines changed

src/debugpy/adapter/launchers.py

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,12 @@ def on_launcher_connected(sock):
8181

8282
try:
8383
listener = sockets.serve(
84-
"Launcher", on_launcher_connected, "127.0.0.1", backlog=0
84+
"Launcher", on_launcher_connected, "127.0.0.1", backlog=1
8585
)
8686
except Exception as exc:
8787
raise start_request.cant_handle(
88-
"{0} couldn't create listener socket for {1}: {2}",
88+
"{0} couldn't create listener socket for launcher: {1}",
8989
session,
90-
session.launcher,
9190
exc,
9291
)
9392

@@ -114,9 +113,7 @@ def on_launcher_connected(sock):
114113
stderr=sys.stderr,
115114
)
116115
except Exception as exc:
117-
raise start_request.cant_handle(
118-
"{0} failed to spawn {1}: {2}", session, session.launcher, exc
119-
)
116+
raise start_request.cant_handle("Failed to spawn launcher: {0}", exc)
120117
else:
121118
log.info('{0} spawning launcher via "runInTerminal" request.', session)
122119
session.client.capabilities.require("supportsRunInTerminalRequest")
@@ -135,9 +132,7 @@ def on_launcher_connected(sock):
135132
exc.propagate(start_request)
136133

137134
if not session.wait_for(lambda: session.launcher, timeout=10):
138-
raise start_request.cant_handle(
139-
"{0} timed out waiting for {1} to connect", session, session.launcher
140-
)
135+
raise start_request.cant_handle("Timed out waiting for launcher to connect")
141136

142137
try:
143138
session.launcher.channel.request(start_request.command, arguments)
@@ -149,18 +144,14 @@ def on_launcher_connected(sock):
149144

150145
if not session.wait_for(lambda: session.launcher.pid is not None, timeout=10):
151146
raise start_request.cant_handle(
152-
'{0} timed out waiting for "process" event from {1}',
153-
session,
154-
session.launcher,
147+
'Timed out waiting for "process" event from launcher'
155148
)
156149

157150
# Wait for the first incoming connection regardless of the PID - it won't
158151
# necessarily match due to the use of stubs like py.exe or "conda run".
159152
conn = servers.wait_for_connection(session, lambda conn: True, timeout=10)
160153
if conn is None:
161-
raise start_request.cant_handle(
162-
"{0} timed out waiting for debuggee to spawn", session
163-
)
154+
raise start_request.cant_handle("Timed out waiting for debuggee to spawn")
164155
conn.attach_to_session(session)
165156

166157
finally:

src/debugpy/common/sockets.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
def create_server(host, port=0, backlog=socket.SOMAXCONN, timeout=None):
1515
"""Return a local server socket listening on the given port."""
16+
17+
assert backlog > 0
1618
if host is None:
1719
host = "127.0.0.1"
1820
if port is None:
@@ -65,6 +67,8 @@ def serve(name, handler, host, port=0, backlog=socket.SOMAXCONN, timeout=None):
6567
Returns the created server socket.
6668
"""
6769

70+
assert backlog > 0
71+
6872
try:
6973
listener = create_server(host, port, backlog, timeout)
7074
except Exception:

0 commit comments

Comments
 (0)