Welcome! Log In Create A New Profile

Advanced

[nginx] Add abstract socket support on Linux

Bjørnar Ness
March 11, 2019 09:50AM
# HG changeset patch
# User Bjornar Ness <bjornar.ness@gmail.com>
# Date 1552311828 -3600
# Mon Mar 11 14:43:48 2019 +0100
# Node ID 9bf37762c5066b2f0ec3e6a312d97c86c4fdba18
# Parent c74904a1702135f673a275bd0d36f010a3bfb89a
Add abstract socket support on Linux

This patch adds abstract socket support for Linux, making it possible
to both listen and connect to abstract socket:

server {
listen unix:@abstract-socket;
}

This is convenient for ephemeral sockets for i.e fastcgi/uwsgi

diff -r c74904a17021 -r 9bf37762c506 src/core/ngx_connection.c
--- a/src/core/ngx_connection.c Sat Mar 09 03:03:56 2019 +0300
+++ b/src/core/ngx_connection.c Mon Mar 11 14:43:48 2019 +0100
@@ -625,7 +625,12 @@

#if (NGX_HAVE_UNIX_DOMAIN)

- if (ls[i].sockaddr->sa_family == AF_UNIX) {
+ if (ls[i].sockaddr->sa_family == AF_UNIX
+#if (NGX_LINUX)
+ && ls[i].addr_text.data[sizeof("unix:") - 1] != '@'
+#endif
+ )
+ {
mode_t mode;
u_char *name;

@@ -1069,6 +1074,9 @@
#if (NGX_HAVE_UNIX_DOMAIN)

if (ls[i].sockaddr->sa_family == AF_UNIX
+#if (NGX_LINUX)
+ && ls[i].addr_text.data[sizeof("unix:") - 1] != '@'
+#endif
&& ngx_process <= NGX_PROCESS_MASTER
&& ngx_new_binary == 0)
{
diff -r c74904a17021 -r 9bf37762c506 src/core/ngx_cycle.c
--- a/src/core/ngx_cycle.c Sat Mar 09 03:03:56 2019 +0300
+++ b/src/core/ngx_cycle.c Mon Mar 11 14:43:48 2019 +0100
@@ -709,7 +709,12 @@

#if (NGX_HAVE_UNIX_DOMAIN)

- if (ls[i].sockaddr->sa_family == AF_UNIX) {
+ if (ls[i].sockaddr->sa_family == AF_UNIX
+#if (NGX_LINUX)
+ && ls[i].addr_text.data[sizeof("unix:") - 1] != '@'
+#endif
+ )
+ {
u_char *name;

name = ls[i].addr_text.data + sizeof("unix:") - 1;
diff -r c74904a17021 -r 9bf37762c506 src/core/ngx_inet.c
--- a/src/core/ngx_inet.c Sat Mar 09 03:03:56 2019 +0300
+++ b/src/core/ngx_inet.c Mon Mar 11 14:43:48 2019 +0100
@@ -242,6 +242,9 @@
if (socklen <= (socklen_t) offsetof(struct sockaddr_un, sun_path)) {
p = ngx_snprintf(text, len, "unix:%Z");

+ } else if (saun->sun_path[0] == '\0') {
+ p = ngx_snprintf(text, len, "unix:@%s%Z", &saun->sun_path[1]);
+
} else {
n = ngx_strnlen((u_char *) saun->sun_path,
socklen - offsetof(struct sockaddr_un, sun_path));
@@ -744,6 +747,13 @@
saun->sun_family = AF_UNIX;
(void) ngx_cpystrn((u_char *) saun->sun_path, path, len);

+#if (NGX_LINUX)
+ if (path[0] == '@') {
+ saun->sun_path[0] = '\0';
+ u->socklen = sizeof(sa_family_t) + strlen(path);
+ }
+#endif
+
u->addrs = ngx_pcalloc(pool, sizeof(ngx_addr_t));
if (u->addrs == NULL) {
return NGX_ERROR;
@@ -765,6 +775,13 @@
u->addrs[0].name.len = len + 4;
u->addrs[0].name.data = u->url.data;

+#if (NGX_LINUX)
+ if (path[0] == '@') {
+ saun->sun_path[0] = '\0';
+ u->addrs[0].socklen = sizeof(sa_family_t) + strlen(path);
+ }
+#endif
+
return NGX_OK;

#else
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] Add abstract socket support on Linux

Bjørnar Ness 121 March 11, 2019 09:50AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 102
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready