WIN32 fixes: Socket not re-used for bind. yaz_log logs WIN32 error
authorAdam Dickmeiss <adam@indexdata.dk>
Thu, 23 Aug 2001 09:02:46 +0000 (09:02 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Thu, 23 Aug 2001 09:02:46 +0000 (09:02 +0000)
message.

comstack/tcpip.c
util/log.c

index 9feb455..4c9b481 100644 (file)
@@ -3,7 +3,11 @@
  * See the file LICENSE for details.
  *
  * $Log: tcpip.c,v $
  * See the file LICENSE for details.
  *
  * $Log: tcpip.c,v $
- * Revision 1.39  2001-07-19 19:49:40  adam
+ * Revision 1.40  2001-08-23 09:02:46  adam
+ * WIN32 fixes: Socket not re-used for bind. yaz_log logs WIN32 error
+ * message.
+ *
+ * Revision 1.39  2001/07/19 19:49:40  adam
  * Fixed bug in tcpip_set_blocking.
  *
  * Revision 1.38  2001/03/21 12:43:36  adam
  * Fixed bug in tcpip_set_blocking.
  *
  * Revision 1.38  2001/03/21 12:43:36  adam
@@ -603,13 +607,15 @@ int tcpip_bind(COMSTACK h, void *address, int mode)
 #else
     TRC (fprintf (stderr, "tcpip_bind\n"));
 #endif
 #else
     TRC (fprintf (stderr, "tcpip_bind\n"));
 #endif
+#ifndef WIN32
     if (setsockopt(h->iofile, SOL_SOCKET, SO_REUSEADDR, (char*) 
        &one, sizeof(one)) < 0)
     {
         h->cerrno = CSYSERR;
         return -1;
     }
     if (setsockopt(h->iofile, SOL_SOCKET, SO_REUSEADDR, (char*) 
        &one, sizeof(one)) < 0)
     {
         h->cerrno = CSYSERR;
         return -1;
     }
-    if (bind(h->iofile, addr, sizeof(struct sockaddr_in)) < 0)
+#endif
+    if (bind(h->iofile, addr, sizeof(struct sockaddr_in)))
     {
         h->cerrno = CSYSERR;
         return -1;
     {
         h->cerrno = CSYSERR;
         return -1;
index e4f9ac1..66d4cc2 100644 (file)
@@ -4,7 +4,11 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: log.c,v $
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: log.c,v $
- * Revision 1.24  2000-09-04 08:58:15  adam
+ * Revision 1.25  2001-08-23 09:02:46  adam
+ * WIN32 fixes: Socket not re-used for bind. yaz_log logs WIN32 error
+ * message.
+ *
+ * Revision 1.24  2000/09/04 08:58:15  adam
  * Added prefix yaz_ for most logging utility functions.
  *
  * Revision 1.23  2000/03/14 09:06:11  adam
  * Added prefix yaz_ for most logging utility functions.
  *
  * Revision 1.23  2000/03/14 09:06:11  adam
 #include <config.h>
 #endif
 
 #include <config.h>
 #endif
 
+#ifdef WIN32
+#include <windows.h>
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
@@ -241,7 +249,26 @@ void yaz_log(int level, const char *fmt, ...)
     vsprintf(buf, fmt, ap);
 #endif
     if (o_level & LOG_ERRNO)
     vsprintf(buf, fmt, ap);
 #endif
     if (o_level & LOG_ERRNO)
-       sprintf(buf + strlen(buf), " [%s]", strerror(errno));
+    {
+#ifdef WIN32
+       DWORD err = GetLastError();
+       if (err)
+       {
+           strcat(buf, " [");
+           FormatMessage(
+               FORMAT_MESSAGE_FROM_SYSTEM,
+               NULL,
+               err,
+               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+               (LPTSTR) buf + strlen(buf),
+               2048,
+               NULL);
+           strcat(buf, "]");
+       }
+#else
+        sprintf(buf + strlen(buf), " [%s]", strerror(errno));
+#endif
+    }
     if (start_hook_func)
         (*start_hook_func)(o_level, buf, start_hook_info);
     ti = time(0);
     if (start_hook_func)
         (*start_hook_func)(o_level, buf, start_hook_info);
     ti = time(0);