Skip to content

Unix socket support in the standard library #1479

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Mar 17, 2016

Conversation

sfackler
Copy link
Member

@sfackler sfackler added the T-libs-api Relevant to the library API team, which will review and decide on the RFC. label Jan 26, 2016
@sfackler sfackler self-assigned this Jan 26, 2016
is more accurate but weirdly repetitive and the extension trait module
`std::os::linux::unix` is even weirder. `std::os::unix::socket` is an option,
but seems like too general of a name for specifically `AF_UNIX` sockets as
opposed to *all* sockets.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps another unresolved question for now could be whether Windows named pipes should be added in parallel? Or something along the lines of if we should hold off on stabilization until there's a suitable Windows alternative as well.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that blocking this feature on named pipes makes a ton of sense. Named pipes do not appear to be used heavily in the Rust ecosystem, and I don't really want us to get into a habit of wanting to add platform specific feature X to the standard library and then hunting for a roughly comparable other-platform specific feature Y to implement along side it for "symmetry".

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm ok, but I do also want to not tip the scales too far in favor of Unix as there are lots of abstractions on Windows we could reasonably provide (e.g. named pipes, IOCP bindings, etc). While crates today may not use these much it may just be because the Windows community is a little smaller.

These are mostly just musings, though, I'd be ok if the RFC doesn't explicitly mention named pipes.

Unix sockets can be configured with the `SOCK_STREAM`, `SOCK_DGRAM`, and
`SOCK_SEQPACKET` types. `SOCK_STREAM` creates a connection-oriented socket that
behaves like a TCP socket, `SOCK_DGRAM` creates a packet-oriented socket that
behaves like a UDP socket, and `SOCK_SEQPACKET` provides something of a hybrid

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SOCK_DGRAM Unix sockets are reliable.

@alexcrichton
Copy link
Member

🔔 This RFC is now entering its week-long final comment period 🔔

@alexcrichton
Copy link
Member

Also from discussion in triage yesterday, the libs team concluded that a good way forward for now with abstract sockets is to do something like:

  • Validate no nul bytes are found in strings
  • Perhaps eventually add a linux-specific extension trait to manage abstract sockets.

It at least errs on the side of being conservative for now!

@alexcrichton alexcrichton added the final-comment-period Will be merged/postponed/closed in ~10 calendar days unless new substational objections are raised. label Mar 3, 2016
@sfackler
Copy link
Member Author

sfackler commented Mar 4, 2016

Updated to disallow use of the abstract namespace.

@gkoz
Copy link

gkoz commented Mar 7, 2016

Shouldn't there be a way to set permissions on the socket before starting to listen to it?

@sfackler
Copy link
Member Author

sfackler commented Mar 7, 2016

What libc API would that use? According to the man page, the socket will inherit the permissions of the directory it's defined in on Linux, but filesystem permissions are ignored on BSD: http://man7.org/linux/man-pages/man7/unix.7.html#NOTES

@gkoz
Copy link

gkoz commented Mar 7, 2016

I had chmod in mind ;) Okay, while I doubt any modern BSDs ignore "file" permissions I totally missed that the portable way is to rely on directory-level permissions.

@alexcrichton
Copy link
Member

The libs team discussed this RFC during triage yesterday, an the decision was to merge. This was the original intention for how Unix sockets would reenter the standard library and the unix-socket crate is doing well enough that moving it in almost wholesale seems good at this time (it's quickly becoming a vetted API).

Thanks again for the RFC @sfackler!

Tracking issue: rust-lang/rust#32312

@alexcrichton alexcrichton merged commit 97780a7 into rust-lang:master Mar 17, 2016
@alexcrichton
Copy link
Member

Ah, also, the initial implementation: rust-lang/rust#32302

@Centril Centril added A-net Proposals relating to networking. A-platform Platform related proposals & ideas A-types-libstd Proposals & ideas introducing new types to the standard library. labels Nov 23, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-net Proposals relating to networking. A-platform Platform related proposals & ideas A-types-libstd Proposals & ideas introducing new types to the standard library. final-comment-period Will be merged/postponed/closed in ~10 calendar days unless new substational objections are raised. T-libs-api Relevant to the library API team, which will review and decide on the RFC.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants