Skip to content
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

Support for unix sockets #22

Open
cmkarlsson opened this issue Oct 19, 2024 · 2 comments
Open

Support for unix sockets #22

cmkarlsson opened this issue Oct 19, 2024 · 2 comments

Comments

@cmkarlsson
Copy link

It would be great if glisten can support unix sockets and abstract unix sockets.

Erlang supports this by passing the option {ip, {local, Path}} to gen_tcp:listen where Path is either a file system path, or an abstract unix sockets where the Path starts with null byte (<<0,path:utf8>>).

I have implemented a prototype in glisten where this is implemented. The prototype makes a couple of different modifications to achieve this:

  1. Extending IpAddress to also represent a UnixSocketAddress
  2. modifying bind to see if the incoming interface starts with "/" or "@" (which is the convention to deal with unix sockets, however we can change this to use something other than bind, like: fn bind_unix_socket(handler, path: String) -> Handler instead
  3. Modifying the type of sockname from #(Dynamic, Int) to Dynamic as the underlying erlang code might return {Hostname :: binary(), Port :: int()} | {local, Path :: binary()}. Then this dynamic is decoded into either #(ipv4|ipv6, port) or #(path, 0).

From my point of view the biggest problem with the prototype is that it piggy-backs on some naming conventions like IpAddress and the return type from sockname which might not be ideal.

Would it be OK if I do the PR with what I currently have and we can take discussion from there?

@rawhat
Copy link
Owner

rawhat commented Oct 25, 2024

Hey, thanks for your interest in this! I have a local branch attempting to address this exact issue, but wasn't super thrilled with the API I came up with.

If you want to open a PR, I'd be more than happy to look at it!

@rawhat
Copy link
Owner

rawhat commented Oct 25, 2024

For reference, this was the original ask: rawhat/mist#48

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants