event/ServerSocket, config/Net: abstract socket support
This commit is contained in:
@@ -29,6 +29,10 @@ ServerSocketAddGeneric(ServerSocket &server_socket, const char *address, unsigne
|
||||
server_socket.AddPort(port);
|
||||
} else if (address[0] == '/' || address[0] == '~') {
|
||||
server_socket.AddPath(ParsePath(address));
|
||||
#ifdef __linux__
|
||||
} else if (address[0] == '@') {
|
||||
server_socket.AddAbstract(address);
|
||||
#endif
|
||||
} else {
|
||||
server_socket.AddHost(address, port);
|
||||
}
|
||||
|
@@ -396,3 +396,19 @@ ServerSocket::AddPath(AllocatedPath &&path)
|
||||
#endif /* !HAVE_UN */
|
||||
}
|
||||
|
||||
|
||||
#ifdef __linux__
|
||||
|
||||
void
|
||||
ServerSocket::AddAbstract(const char *name)
|
||||
{
|
||||
assert(name != nullptr);
|
||||
assert(*name == '@');
|
||||
|
||||
AllocatedSocketAddress address;
|
||||
address.SetLocal(name);
|
||||
|
||||
AddAddress(std::move(address));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -99,6 +99,18 @@ public:
|
||||
*/
|
||||
void AddPath(AllocatedPath &&path);
|
||||
|
||||
#ifdef __linux__
|
||||
/**
|
||||
* Add a listener on an abstract local socket (Linux specific).
|
||||
*
|
||||
* Throws on error.
|
||||
*
|
||||
* @param name the abstract socket name, starting with a '@'
|
||||
* instead of a null byte
|
||||
*/
|
||||
void AddAbstract(const char *name);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Add a socket descriptor that is accepting connections. After this
|
||||
* has been called, don't call server_socket_open(), because the
|
||||
|
Reference in New Issue
Block a user