From 21a1a3ec1b319b1109a7d876cf946354d7b14c9b Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Thu, 14 May 2020 18:38:10 +0200 Subject: WIP implement SK_UNIX_ACTIVE --- lib/socket.h | 1 + sysdep/unix/io.c | 29 +++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/socket.h b/lib/socket.h index 96fedeeb..90006fd2 100644 --- a/lib/socket.h +++ b/lib/socket.h @@ -143,6 +143,7 @@ extern int sk_priority_control; /* Suggested priority for control traffic, shou #define SK_UNIX 9 #define SK_SSH_ACTIVE 10 /* - - * * - ? - DA = host */ #define SK_SSH 11 +#define SK_UNIX_ACTIVE 12 /* * Socket subtypes diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index 1a659567..814fa1ec 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -1052,6 +1052,14 @@ sk_tcp_connected(sock *s) s->tx_hook(s); } +static void +sk_unix_connected(sock *s) +{ + sk_alloc_bufs(s); + s->type = SK_UNIX; + s->tx_hook(s); +} + #ifdef HAVE_LIBSSH static void sk_ssh_connected(sock *s) @@ -1557,13 +1565,20 @@ sk_connect_unix(sock *s, char *name, socklen_t namelen) memcpy(sa.sun_path, name, namelen); hexdump((const char*)&sa, sizeof(sa.sun_family) + namelen); - if (connect(fd, (struct sockaddr *) &sa, sizeof(sa.sun_family) + namelen) < 0) - return -4; + + s->fd = fd; + s->type = SK_UNIX_ACTIVE; + s->ttx = ""; /* Force s->ttx != s->tpos */ + + if (connect(fd, (struct sockaddr *) &sa, sizeof(sa.sun_family) + namelen) >= 0) + sk_unix_connected(s); + else if (errno != EINTR && errno != EAGAIN && errno != EINPROGRESS && + errno != ECONNREFUSED && errno != EHOSTUNREACH && errno != ENETUNREACH) + ERR2("connect"); + break; log(L_TRACE "sk_connect_unix 5"); - s->fd = fd; - s->type = SK_UNIX; sk_insert(s); sk_alloc_bufs(s); return 0; @@ -1987,6 +2002,12 @@ sk_write(sock *s) return 0; } + case SK_UNIX_ACTIVE: + { + sk_unix_connected(s); + return 0; + } + #ifdef HAVE_LIBSSH case SK_SSH_ACTIVE: { -- cgit v1.2.3