From 3f0e1c3f4f243d261f3b1c55f55c011381958938 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Mon, 23 May 2011 13:35:52 -0400 Subject: [PATCH] sock_connect() - if first char of hostname is '/' assume it is a unix domain socket and connect to that instead --- citadel/clientsocket.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/citadel/clientsocket.c b/citadel/clientsocket.c index 572f28f17..3bc58a4f7 100644 --- a/citadel/clientsocket.c +++ b/citadel/clientsocket.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -52,6 +53,30 @@ #define INADDR_NONE 0xffffffff #endif + +int uds_sock_connect(char *sockpath) +{ + struct sockaddr_un addr; + int s; + + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + safestrncpy(addr.sun_path, sockpath, sizeof addr.sun_path); + + s = socket(AF_UNIX, SOCK_STREAM, 0); + if (s < 0) { + return(-1); + } + + if (connect(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + close(s); + return(-1); + } + + return s; +} + + int sock_connect(char *host, char *service, char *protocol) { struct hostent *phe; @@ -63,6 +88,11 @@ int sock_connect(char *host, char *service, char *protocol) if ((host == NULL) || IsEmptyStr(host)) return(-1); + + if (host[0] == '/') { + return uds_sock_connect(host); + } + if ((service == NULL) || IsEmptyStr(service)) return(-1); if ((protocol == NULL) || IsEmptyStr(protocol)) -- 2.39.2