-
[citadel.git] / webcit / tcp_sockets.c
index feac83f7ab553bf1fc0debf37481fa045a4bc0af..62f8865592771ee2070049a9a52ac4aecebd5e00 100644 (file)
@@ -394,23 +394,25 @@ int serv_read_binary(StrBuf *Ret, size_t total_len, StrBuf *Buf)
                                    return -1; 
                            }
 
-                           pch = ChrPtr(WCC->ReadBuf);
-                           YetRead = WCC->ReadPos - pch;
-                           if (YetRead > 0)
-                           {
-                                   long StillThere;
-                                   
-                                   StillThere = StrLength(WCC->ReadBuf) - 
-                                           YetRead;
-
-                                   StrBufPlain(Ret, 
-                                               WCC->ReadPos,
-                                               StillThere);
-                                   total_len -= StillThere;
-                           }
-                           FlushStrBuf(WCC->ReadBuf);
-                           WCC->ReadPos = NULL;
-                           
+                           if (WCC->ReadPos != NULL) {
+                                   pch = ChrPtr(WCC->ReadBuf);
+
+                                   YetRead = WCC->ReadPos - pch;
+                                   if (YetRead > 0)
+                                   {
+                                           long StillThere;
+                                           
+                                           StillThere = StrLength(WCC->ReadBuf) - 
+                                                   YetRead;
+                                           
+                                           StrBufPlain(Ret, 
+                                                       WCC->ReadPos,
+                                                       StillThere);
+                                           total_len -= StillThere;
+                                   }
+                                   FlushStrBuf(WCC->ReadBuf);
+                                   WCC->ReadPos = NULL;
+                           } 
                            if (total_len > 0)
                            {
                                    rc = StrBufReadBLOB(Ret, 
@@ -567,7 +569,7 @@ int ig_tcp_server(char *ip_addr, int port_number, int queue_len)
                }
                if (inet_pton(AF_INET6, bind_to, &sin.sin6_addr) <= 0) {
                        lprintf(1, "Error binding to [%s] : %s\n", ip_addr, strerror(errno));
-                       abort();
+                       return (-WC_EXIT_BIND);
                }
        }
 
@@ -581,7 +583,7 @@ int ig_tcp_server(char *ip_addr, int port_number, int queue_len)
 
        s = socket(PF_INET6, SOCK_STREAM, (p->p_proto));
        if (s < 0) {
-               lprintf(1, "Can't create a socket: %s\n", strerror(errno));
+               lprintf(1, "Can't create an IPv6 socket: %s\n", strerror(errno));
                return (-WC_EXIT_BIND);
        }
        /* Set some socket options that make sense. */
@@ -644,7 +646,7 @@ int ig_tcp_server(char *ip_addr, int port_number, int queue_len)
 
        s = socket(PF_INET, SOCK_STREAM, (p->p_proto));
        if (s < 0) {
-               lprintf(1, "Can't create a socket: %s\n", strerror(errno));
+               lprintf(1, "Can't create an IPv4 socket: %s\n", strerror(errno));
                return (-WC_EXIT_BIND);
        }
        /* Set some socket options that make sense. */
@@ -700,8 +702,7 @@ int ig_uds_server(char *sockpath, int queue_len)
 
        s = socket(AF_UNIX, SOCK_STREAM, 0);
        if (s < 0) {
-               lprintf(1, "webcit: Can't create a socket: %s\n",
-                       strerror(errno));
+               lprintf(1, "webcit: Can't create a unix domain socket: %s\n", strerror(errno));
                return (-WC_EXIT_BIND);
        }
 
@@ -793,6 +794,7 @@ int client_read_to(ParsedHttpHdrs *Hdr, StrBuf *Target, int bytes, int timeout)
        if (retval < 0) {
                lprintf(2, "client_read() failed: %s\n",
                        Error);
+               wc_backtrace();
                return retval;
        }