summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_listen_socket.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2017-09-14 18:16:22 +0300
committerIgor Sysoev <igor@sysoev.ru>2017-09-14 18:16:22 +0300
commit4d5e39e8c1fdad50937fd440ca7a8df43a97e078 (patch)
treec35b4e2f26d65e38728d33deef920771767b6b5d /src/nxt_listen_socket.c
parentf3280c5dc94e5415970fbbe8d1f03721b85f5553 (diff)
downloadunit-4d5e39e8c1fdad50937fd440ca7a8df43a97e078.tar.gz
unit-4d5e39e8c1fdad50937fd440ca7a8df43a97e078.tar.bz2
Fixed textual socket name lengths and Unix domain sockaddr length.
Diffstat (limited to 'src/nxt_listen_socket.c')
-rw-r--r--src/nxt_listen_socket.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/nxt_listen_socket.c b/src/nxt_listen_socket.c
index 4141c206..4d4a8c5e 100644
--- a/src/nxt_listen_socket.c
+++ b/src/nxt_listen_socket.c
@@ -176,6 +176,47 @@ fail:
}
+void
+nxt_listen_socket_remote_size(nxt_listen_socket_t *ls, nxt_sockaddr_t *sa)
+{
+ switch (sa->u.sockaddr.sa_family) {
+
+#if (NXT_INET6)
+
+ case AF_INET6:
+ ls->socklen = sizeof(struct sockaddr_in6);
+ ls->address_length = NXT_INET6_ADDR_STR_LEN;
+
+ break;
+
+#endif
+
+#if (NXT_HAVE_UNIX_DOMAIN)
+
+ case AF_UNIX:
+ /*
+ * A remote socket is usually unbound and thus has unspecified Unix
+ * domain sockaddr_un which can be shortcut to 3 bytes. To handle
+ * a bound remote socket correctly ls->socklen should be larger, see
+ * comment in nxt_socket.h.
+ */
+ ls->socklen = offsetof(struct sockaddr_un, sun_path) + 1;
+ ls->address_length = sizeof("unix:") - 1;
+
+ break;
+
+#endif
+
+ default:
+ case AF_INET:
+ ls->socklen = sizeof(struct sockaddr_in);
+ ls->address_length = NXT_INET_ADDR_STR_LEN;
+
+ break;
+ }
+}
+
+
size_t
nxt_listen_socket_pool_min_size(nxt_listen_socket_t *ls)
{