changeset 79226:8919d6b286e1

(sock_err_message): New function. (set_tcp_socket): Use it.
author Jason Rumney <jasonr@gnu.org>
date Thu, 25 Oct 2007 23:56:34 +0000
parents bd489b08bec6
children 8cd7ba6ee31f
files lib-src/emacsclient.c
diffstat 1 files changed, 25 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lib-src/emacsclient.c	Thu Oct 25 14:40:00 2007 +0000
+++ b/lib-src/emacsclient.c	Thu Oct 25 23:56:34 2007 +0000
@@ -395,6 +395,29 @@
 char send_buffer[SEND_BUFFER_SIZE + 1];
 int sblen = 0;	/* Fill pointer for the send buffer.  */
 
+/* On Windows, the socket library was historically separate from the standard
+   C library, so errors are handled differently.  */
+void
+sock_err_message (function_name)
+     char *function_name;
+{
+#ifdef WINDOWSNT
+  char* msg = NULL;
+
+  FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM
+                 | FORMAT_MESSAGE_ALLOCATE_BUFFER
+                 | FORMAT_MESSAGE_ARGUMENT_ARRAY,
+                 NULL, WSAGetLastError (), 0, (LPTSTR)&msg, 0, NULL);
+
+  message (TRUE, "%s: %s: %s\n", progname, function_name, msg);
+
+  LocalFree (msg);
+#else
+  message (TRUE, "%s: %s: %s\n", progname, function_name, strerror (errno));
+#endif
+}
+
+
 /* Let's send the data to Emacs when either
    - the data ends in "\n", or
    - the buffer is full (but this shouldn't happen)
@@ -646,7 +669,7 @@
    */
   if ((s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
     {
-      message (TRUE, "%s: socket: %s\n", progname, strerror (errno));
+      sock_err_message ("socket");
       return INVALID_SOCKET;
     }
 
@@ -655,7 +678,7 @@
    */
   if (connect (s, (struct sockaddr *) &server, sizeof server) < 0)
     {
-      message (TRUE, "%s: connect: %s\n", progname, strerror (errno));
+      sock_err_message ("connect");
       return INVALID_SOCKET;
     }