From: Art Cancro Date: Mon, 23 May 2011 17:35:52 +0000 (-0400) Subject: sock_connect() - if first char of hostname is '/' assume it is a unix domain socket... X-Git-Tag: v7.87~17^2~2^2~4 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=3f0e1c3f4f243d261f3b1c55f55c011381958938 sock_connect() - if first char of hostname is '/' assume it is a unix domain socket and connect to that instead --- 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))