X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=webcit%2Ftcp_sockets.c;fp=webcit%2Ftcp_sockets.c;h=b5f8adac7e20d5f311eb12b7eb57cb57af3cfa1c;hp=b27f2ad864c1c5cd9da9f235e5b6e19de8ab95ec;hb=d12a0b0259ca73f15d413f7a4fcd8f953c7c0c28;hpb=3e11c18430552bb1f5dc462848d01c3a36f12c1c diff --git a/webcit/tcp_sockets.c b/webcit/tcp_sockets.c index b27f2ad86..b5f8adac7 100644 --- a/webcit/tcp_sockets.c +++ b/webcit/tcp_sockets.c @@ -36,6 +36,7 @@ RETSIGTYPE timeout(int signum) int uds_connectsock(char *sockpath) { struct sockaddr_un addr; + int fdflags; int s; memset(&addr, 0, sizeof(addr)); @@ -54,6 +55,25 @@ int uds_connectsock(char *sockpath) return(-1); } + fdflags = fcntl(s, F_GETFL); + if (fdflags < 0) { + syslog(LOG_ERR, + "unable to get socket %d flags! %s \n", + s, + strerror(errno)); + close(s); + return -1; + } + fdflags = fdflags | O_NONBLOCK; + if (fcntl(s, F_SETFL, fdflags) < 0) { + syslog(LOG_ERR, + "unable to set socket %d nonblocking flags! %s \n", + s, + strerror(errno)); + close(s); + return -1; + } + return s; } @@ -123,7 +143,28 @@ int tcp_connectsock(char *host, char *service) } rc = connect(s, ai->ai_addr, ai->ai_addrlen); if (rc >= 0) { + int fdflags; freeaddrinfo(res); + + fdflags = fcntl(rc, F_GETFL); + if (fdflags < 0) { + syslog(LOG_ERR, + "unable to get socket %d flags! %s \n", + rc, + strerror(errno)); + close(rc); + return -1; + } + fdflags = fdflags | O_NONBLOCK; + if (fcntl(rc, F_SETFL, fdflags) < 0) { + syslog(LOG_ERR, + "unable to set socket %d nonblocking flags! %s \n", + rc, + strerror(errno)); + close(s); + return -1; + } + return(s); } else { @@ -153,7 +194,7 @@ int serv_getln(char *strbuf, int bufsize) FlushStrBuf(WCC->MigrateReadLineBuf); strbuf[len] = '\0'; #ifdef SERV_TRACE - syslog(LOG_DEBUG, "%3d<<<%s\n", WC->serv_sock, strbuf); + syslog(LOG_DEBUG, "%3d<<<%s\n", WCC->serv_sock, strbuf); #endif return len; }