X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Ftcp_sockets.c;h=da483deabceab4b9c1f0162169495d69411b738b;hb=9dd21cb1dcde005b5e1617c187015f009f2437e8;hp=1adcafc32dcbc1319d5e13e2c072abb962158417;hpb=a0867435cec0b5c7647ff126585664fc05345e08;p=citadel.git diff --git a/webcit/tcp_sockets.c b/webcit/tcp_sockets.c index 1adcafc32..da483deab 100644 --- a/webcit/tcp_sockets.c +++ b/webcit/tcp_sockets.c @@ -52,7 +52,7 @@ int uds_connectsock(char *sockpath) s = socket(AF_UNIX, SOCK_STREAM, 0); if (s < 0) { - syslog(1, "Can't create socket[%s]: %s\n", sockpath, strerror(errno)); + syslog(1, "Can't create socket [%s]: %s\n", sockpath, strerror(errno)); return(-1); } @@ -185,6 +185,7 @@ int StrBuf_ServGetln(StrBuf *buf) syslog(1, "StrBuf_ServGetln(): Server connection broken: %s\n", (ErrStr)?ErrStr:""); wc_backtrace(); + if (WCC->serv_sock > 0) close(WCC->serv_sock); WCC->serv_sock = (-1); WCC->connected = 0; WCC->logged_in = 0; @@ -220,6 +221,7 @@ int StrBuf_ServGetBLOBBuffered(StrBuf *buf, long BlobSize) syslog(1, "StrBuf_ServGetBLOBBuffered(): Server connection broken: %s\n", (ErrStr)?ErrStr:""); wc_backtrace(); + if (WCC->serv_sock > 0) close(WCC->serv_sock); WCC->serv_sock = (-1); WCC->connected = 0; WCC->logged_in = 0; @@ -245,6 +247,7 @@ int StrBuf_ServGetBLOB(StrBuf *buf, long BlobSize) syslog(1, "StrBuf_ServGetBLOB(): Server connection broken: %s\n", (ErrStr)?ErrStr:""); wc_backtrace(); + if (WCC->serv_sock > 0) close(WCC->serv_sock); WCC->serv_sock = (-1); WCC->connected = 0; WCC->logged_in = 0; @@ -275,8 +278,11 @@ void FlushReadBuf (void) pche = pch + len; if (WCC->ReadPos != pche) { - syslog(1, "ERROR: somebody didn't eat his soup! Remaing Chars: %ld [%s]\n", - pche - WCC->ReadPos, pche); + syslog(1, + "ERROR: somebody didn't eat his soup! Remaing Chars: %ld [%s]\n", + (long)(pche - WCC->ReadPos), + pche + ); syslog(1, "--------------------------------------------------------------------------------\n" "Whole buf: [%s]\n" @@ -298,7 +304,7 @@ void FlushReadBuf (void) * buf the buffer to write to citadel server * nbytes how many bytes to send to citadel server */ -void serv_write(const char *buf, int nbytes) +int serv_write(const char *buf, int nbytes) { wcsession *WCC = WC; int bytes_written = 0; @@ -312,14 +318,15 @@ void serv_write(const char *buf, int nbytes) const char *ErrStr = strerror(errno); syslog(1, "serv_write(): Server connection broken: %s\n", (ErrStr)?ErrStr:""); - close(WCC->serv_sock); + if (WCC->serv_sock > 0) close(WCC->serv_sock); WCC->serv_sock = (-1); WCC->connected = 0; WCC->logged_in = 0; - return; + return 0; } bytes_written = bytes_written + retval; } + return 1; } @@ -327,30 +334,32 @@ void serv_write(const char *buf, int nbytes) * send line to server * string the line to send to the citadel server */ -void serv_puts(const char *string) +int serv_puts(const char *string) { #ifdef SERV_TRACE syslog(9, "%3d>>>%s\n", WC->serv_sock, string); #endif FlushReadBuf(); - serv_write(string, strlen(string)); - serv_write("\n", 1); + if (!serv_write(string, strlen(string))) + return 0; + return serv_write("\n", 1); } /* * send line to server * string the line to send to the citadel server */ -void serv_putbuf(const StrBuf *string) +int serv_putbuf(const StrBuf *string) { #ifdef SERV_TRACE syslog(9, "%3d>>>%s\n", WC->serv_sock, ChrPtr(string)); #endif FlushReadBuf(); - serv_write(ChrPtr(string), StrLength(string)); - serv_write("\n", 1); + if (!serv_write(ChrPtr(string), StrLength(string))) + return 0; + return serv_write("\n", 1); } @@ -359,11 +368,12 @@ void serv_putbuf(const StrBuf *string) * format the formatstring * ... the entities to insert into format */ -void serv_printf(const char *format,...) +int serv_printf(const char *format,...) { va_list arg_ptr; char buf[SIZ]; size_t len; + int rc; FlushReadBuf(); @@ -374,10 +384,11 @@ void serv_printf(const char *format,...) len = strlen(buf); buf[len++] = '\n'; buf[len] = '\0'; - serv_write(buf, len); + rc = serv_write(buf, len); #ifdef SERV_TRACE syslog(9, ">>>%s", buf); #endif + return rc; } @@ -403,7 +414,7 @@ int serv_read_binary(StrBuf *Ret, size_t total_len, StrBuf *Buf) return -1; } - serv_printf("READ %d|%d", bytes_read, total_len-bytes_read); + serv_printf("READ "SIZE_T_FMT"|"SIZE_T_FMT, bytes_read, total_len-bytes_read); if ( (rc = StrBuf_ServGetln(Buf) > 0) && (GetServerStatus(Buf, NULL) == 6) ) { if (rc < 0) @@ -414,6 +425,7 @@ int serv_read_binary(StrBuf *Ret, size_t total_len, StrBuf *Buf) if (rc < 0) { syslog(1, "Server connection broken during download\n"); wc_backtrace(); + if (WCC->serv_sock > 0) close(WCC->serv_sock); WCC->serv_sock = (-1); WCC->connected = 0; WCC->logged_in = 0; @@ -569,11 +581,13 @@ int webcit_tcp_server(char *ip_addr, int port_number, int queue_len) if (b < 0) { syslog(1, "Can't bind: %s\n", strerror(errno)); + close(s); return (-WC_EXIT_BIND); } if (listen(s, queue_len) < 0) { syslog(1, "Can't listen: %s\n", strerror(errno)); + close(s); return (-WC_EXIT_BIND); } return (s); @@ -613,14 +627,14 @@ int webcit_uds_server(char *sockpath, int queue_len) } if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) { - syslog(1, "webcit: Can't bind: %s\n", - strerror(errno)); + syslog(1, "webcit: Can't bind: %s\n", strerror(errno)); + close(s); return (-WC_EXIT_BIND); } if (listen(s, actual_queue_len) < 0) { - syslog(1, "webcit: Can't listen: %s\n", - strerror(errno)); + syslog(1, "webcit: Can't listen: %s\n", strerror(errno)); + close(s); return (-WC_EXIT_BIND); } @@ -921,6 +935,8 @@ SessionDestroyModule_TCPSOCKETS FreeStrBuf(&sess->ReadBuf); sess->ReadPos = NULL; FreeStrBuf(&sess->MigrateReadLineBuf); - if (sess->serv_sock > 0) + if (sess->serv_sock > 0) { + syslog(LOG_DEBUG, "Closing socket %d", sess->serv_sock); close(sess->serv_sock); + } }