MagicStack / MagicStack/uvloop

uvloop is broken for abstract sockets - create_unix_connection does not work for abstract sockets as libuv does not support them

Open
#528 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
Cython
Stars
11.9k
Forks
616
PR merge metrics
No merged PRs in 30d

Description

* **uvloop version**: master
* **Python version**: 3.10+
* **Platform**: unix
* **Can you reproduce the bug with `PYTHONASYNCIODEBUG` in env?**: yes
* **Does uvloop behave differently from vanilla asyncio? How?**: yes

uvloop:
tr = UnixTransport.new(self, protocol, None, waiter, context)
tr.connect(path) <--- uses uv_pipe_connect which uses uv__strscpy which assumes zero terminated string

asyncio:
sock_connect -> getsockaddrarg (in socketmodule.c) which uses memcpy


I have raised this with libuv as issue: https://github.com/libuv/libuv/discussions/3911

Contributor guide

No contributing guide indexed for this repository

Research direction

Start at create_unix_connection and the shown UnixTransport.new/tr.connect(path) path, then compare it with vanilla asyncio's socket_connect handling. Read the linked libuv discussion about abstract sockets before deciding whether the fix belongs in uvloop or libuv. Done means abstract Unix socket connections work as expected, with the behavior verified against asyncio.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.