diff --git a/gcc/ada/libgnat/g-socket.adb b/gcc/ada/libgnat/g-socket.adb
index c0b307964c5..063b48e0a2e 100644
--- a/gcc/ada/libgnat/g-socket.adb
+++ b/gcc/ada/libgnat/g-socket.adb
@@ -461,8 +461,8 @@ package body GNAT.Sockets is
    is
       Res : C.int;
       Sin : aliased Sockaddr;
-      Len : constant C.int := Sin'Size / 8;
-
+      Len : constant C.int := C.int (Lengths (Address.Family));
+      --  This is the significant length of Sin, not its actual length.
    begin
       Set_Address (Sin'Unchecked_Access, Address);
 
diff --git a/gcc/testsuite/gnat.dg/socket2.adb b/gcc/testsuite/gnat.dg/socket2.adb
new file mode 100644
index 00000000000..2ca5288fb77
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/socket2.adb
@@ -0,0 +1,16 @@
+-- { dg-do run }
+with GNAT.Sockets;
+procedure Socket2 is
+   Address : GNAT.Sockets.Sock_Addr_Type;
+   Server_Socket : GNAT.Sockets.Socket_Type;
+begin
+   Address.Addr := GNAT.Sockets.Any_Inet_Addr;
+   Address.Port := 16#1234#;
+   GNAT.Sockets.Create_Socket (Server_Socket);
+   GNAT.Sockets.Set_Socket_Option
+     (Server_Socket,
+      GNAT.Sockets.Socket_Level,
+      (GNAT.Sockets.Reuse_Address, True));
+   GNAT.Sockets.Bind_Socket (Server_Socket, Address);
+   GNAT.Sockets.Close_Socket (Server_Socket);
+end Socket2;
