X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fclientsocket.c;h=3bc58a4f7cdf0c6afd2660d501122a01a304edcc;hb=3f0e1c3f4f243d261f3b1c55f55c011381958938;hp=572f28f17c1293d324b732e51b11261fbda33a28;hpb=242a6c7b1f58dbb3674978dcb6e1e9283680932f;p=citadel.git 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))