Fix struct sockaddr/sockaddr_in/sockaddr_un strict aliasing violations
[deliverable/binutils-gdb.git] / gdb / gdbserver / remote-utils.c
index 1de86beecfbf22128ea7c08841bb64a3c6d71c0f..69f87bd27fc261ecba0ca05b07b5980f846daa00 100644 (file)
 #if HAVE_SYS_FILE_H
 #include <sys/file.h>
 #endif
-#if HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
 #if HAVE_NETDB_H
 #include <netdb.h>
 #endif
 #include <arpa/inet.h>
 #endif
 #include <sys/stat.h>
-
-#if USE_WIN32API
-#include <winsock2.h>
-#endif
+#include "gdb_socket.h"
 
 #if __QNX__
 #include <sys/iomgr.h>
@@ -153,14 +144,14 @@ enable_async_notification (int fd)
 static int
 handle_accept_event (int err, gdb_client_data client_data)
 {
-  struct sockaddr_in sockaddr;
+  union gdb_sockaddr_u sockaddr;
   socklen_t tmp;
 
   if (debug_threads)
     debug_printf ("handling possible accept event\n");
 
-  tmp = sizeof (sockaddr);
-  remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &tmp);
+  tmp = sizeof (sockaddr.sa_in);
+  remote_desc = accept (listen_desc, &sockaddr.sa, &tmp);
   if (remote_desc == -1)
     perror_with_name ("Accept failed");
 
@@ -195,7 +186,7 @@ handle_accept_event (int err, gdb_client_data client_data)
 
   /* Convert IP address to string.  */
   fprintf (stderr, "Remote debugging from host %s\n",
-          inet_ntoa (sockaddr.sin_addr));
+          inet_ntoa (sockaddr.sa_in.sin_addr));
 
   enable_async_notification (remote_desc);
 
@@ -224,7 +215,7 @@ remote_prepare (char *name)
   static int winsock_initialized;
 #endif
   int port;
-  struct sockaddr_in sockaddr;
+  union gdb_sockaddr_u sockaddr;
   socklen_t tmp;
   char *port_end;
 
@@ -269,11 +260,11 @@ remote_prepare (char *name)
   setsockopt (listen_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
              sizeof (tmp));
 
-  sockaddr.sin_family = PF_INET;
-  sockaddr.sin_port = htons (port);
-  sockaddr.sin_addr.s_addr = INADDR_ANY;
+  sockaddr.sa_in.sin_family = PF_INET;
+  sockaddr.sa_in.sin_port = htons (port);
+  sockaddr.sa_in.sin_addr.s_addr = INADDR_ANY;
 
-  if (bind (listen_desc, (struct sockaddr *) &sockaddr, sizeof (sockaddr))
+  if (bind (listen_desc, &sockaddr.sa, sizeof (sockaddr.sa_in))
       || listen (listen_desc, 1))
     perror_with_name ("Can't bind address");
 
This page took 0.024146 seconds and 4 git commands to generate.