Update setup.py - #7
Merged
Merged
Conversation
* Extended description * The list of authors includes Ben Dyer (http://bugs.python.org/msg93286) * Author email points to the mailing list * URL points to the homepage rather than to GitHub page (the former has a link to the latter) * The classifier `Topic` set to `Libraries` rather than `Build Tools` (it's not a build tool, is it?) * The classifier `Programming Language :: Python` updated to remove Python version, since the package is intended to work with 3.x and 2.7
pavel-kirienko
added a commit
that referenced
this pull request
Jul 18, 2026
Review findings #6, #7, #9 (one restructure of the send path). - #6: the subject writer and unicast sent to interfaces serially against one shared deadline, so a congested first interface could consume the whole deadline and starve a healthy redundant one. Interfaces are now sent to concurrently via asyncio.gather; each interface's frames still go out in order. - #7: concurrent senders shared one TX socket per interface, but asyncio's selector loop permits only one writer callback per fd, so an overlapping sock_sendto could be displaced and hang. Each socket now has its own asyncio.Lock; a new send_on_iface helper holds it for the transfer. - #9: a send suspended mid-transfer while close() emptied _tx_socks used to index the emptied list and raise IndexError. The send path now snapshots the (iface, socket, lock) elements before the first await, so a racing close leaves the send index-safe; it fails cleanly on the closed socket and is aggregated into a SendError. Aggregation semantics are unchanged: success means all frames delivered on at least one interface; a partial failure warns rather than raising. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CabiCDQ5DNBYq8WDKRzG4Z
pavel-kirienko
added a commit
that referenced
this pull request
Jul 18, 2026
Follow-ups to findings #6/#7/#13 from the Codex design review: - Bound each interface's lock acquisition by the transfer deadline, so a short-deadline sender queued behind a long-deadline holder of the same socket lock fails on its own budget instead of waiting the holder out. - gather(return_exceptions=True) so every interface send settles before aggregation, leaving none running in the background. - zip(strict=True) over the parallel interface/socket/lock lists to expose any length desync. - Resolve IP_MULTICAST_ALL via getattr so a CPython build that exposes it is used in preference to the hardcoded Linux uapi value. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CabiCDQ5DNBYq8WDKRzG4Z
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
@bendyer
Topicset toLibrariesrather thanBuild Tools(it's not a build tool, is it?)Programming Language :: Pythonupdated to remove Python version, since the package is intended to work with 3.x and 2.7