+2019-03-22 Dmitriy Anisimkov <anisimko@adacore.com>
+
+ PR ada/89583
+ * libgnat/g-socket.adb (Bind_Socket, Connect_Socket,
+ Send_Socket): Fix the computation of structure lengths passed to
+ low level routines.
+ (Is_IPv6_Address): Fix the number of expected colons.
+
2019-03-11 Martin Liska <mliska@suse.cz>
* gcc-interface/misc.c (gnat_post_options): Wrap option name in string
is
Res : C.int;
Sin : aliased Sockaddr;
- Len : constant C.int := Sin'Size / 8;
begin
Set_Address (Sin'Unchecked_Access, Address);
- Res := C_Bind (C.int (Socket), Sin'Address, Len);
+ Res := C_Bind
+ (C.int (Socket), Sin'Address, C.int (Lengths (Address.Family)));
if Res = Failure then
Raise_Socket_Error (Socket_Errno);
Server : Sock_Addr_Type) return C.int
is
Sin : aliased Sockaddr;
- Len : constant C.int := Sin'Size / 8;
-
begin
Set_Address (Sin'Unchecked_Access, Server);
- return C_Connect (C.int (Socket), Sin'Address, Len);
+ return C_Connect
+ (C.int (Socket), Sin'Address, C.int (Lengths (Server.Family)));
end Connect_Socket;
procedure Connect_Socket
end if;
end loop;
- return Colons <= 7;
+ return Colons <= 8;
end Is_IPv6_Address;
---------------------
if To /= null then
Set_Address (Sin'Unchecked_Access, To.all);
C_To := Sin'Address;
- Len := Sin'Size / 8;
+ Len := C.int (Thin_Common.Lengths (To.Family));
else
C_To := System.Null_Address;
+2019-03-22 Simon Wright <simon@pushface.org>
+
+ PR ada/89583
+ * gnat.dg/socket2.adb: New.
+
2019-03-22 Bill Schmidt <wschmidt@linux.ibm.com>
* gcc.target/powerpc/mmx-psubd-2.c: Test _m_psubd.
--- /dev/null
+-- { 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;