BUG REPORTS HAVE TO CONTAIN AT LEAST THE FOLLOWING INFORMATION IN ORDER TO BE USEFUL:
the exact version of GCC, as shown by "gcc -v"; gcc -v Reading specs from C:/languages/MinGW/bin/../lib/gcc/mingw32/3.4.2/specs Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as -- host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls -- enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable- shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x - -enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash- synchronization --enable-libstdcxx-debug Thread model: win32 gcc version 3.4.2 (mingw-special) THE SYSTEM TYPE; Windows 2000 Professional, Windows 2000 Server, Windows 2003 THE OPTIONS WHEN GCC WAS CONFIGURED/BUILT; Binaries used from minGW containing MinGW version 3.2.0 contains the following list of packages: gcc-ada-3.4.2.tar.gz gcc-core-3.4.2.tar.gz gcc-g++-3.4.2.tar.gz gcc-g77-3.4.2.tar.gz gcc-java-3.4.2.tar.gz gcc-objc-3.4.2.tar.gz binutils-2.15.91-20040904-1 mingw-runtime-3.6 w32api-3.2 gdb-5.2.1-1 mingw32-make-3.80.0-3 mingw-utils-0.3.tar.gz But this bug also applies to the 'official' gnat 3.15p from ACT THE EXACT COMMAND LINE PASSED TO THE GCC PROGRAM TRIGGERING THE BUG (not just the flags passed to gnatmake, but gnatmake prints the parameters it passed to gcc) C:\Temp>gnatmake socket_connect.adb gcc -c socket_connect.adb socket_connect.adb:3:18: warning: "Gnat.Sockets.Thin" is an internal GNAT unit socket_connect.adb:3:18: warning: use of this unit is non-portable and version-d ependent gnatbind -x socket_connect.ali gnatlink socket_connect.ali A COLLECTION OF SOURCE FILES FOR REPRODUCING THE BUG, PREFERABLY A MINIMAL SET (SEE BELOW); with Text_Io; with Gnat.Sockets; with Gnat.Sockets.Thin; with Ada.Exceptions; procedure Socket_Connect is Socket : Gnat.Sockets.Socket_Type; Address : Gnat.Sockets.Sock_Addr_Type; Error : Integer := 0; -------------------------------------------------- task type Run_Once is entry Execute; end Run_Once; -------------------------------------------------- task body Run_Once is begin select accept Execute do text_io.put_line("Task running, Execute!"); end Execute; or terminate; end select; end Run_Once; -------------------------------------------------- begin declare TmpTask : Run_Once; begin TmpTask.Execute; end; text_io.put_line("Startup sockets"); Gnat.Sockets.Initialize; text_io.put_line("Get a socket"); Gnat.Sockets.Create_Socket (Socket); text_io.put_line("Try to connect!"); Address.Addr := Gnat.Sockets.Inet_Addr("127.0.0.1"); Address.Port := 8000; Gnat.Sockets.Connect_Socket (Socket, Address); text_io.put_line("Connected!"); text_io.put_line("Close socket!"); Gnat.Sockets.Close_Socket (Socket); text_io.put_line("Shutdown sockets!"); Gnat.Sockets.Finalize; text_io.put_line("Done!"); exception when E: others => Text_IO.Put_Line(Ada.Exceptions.Exception_Name (E) & ": " & Ada.Exceptions.Exception_Message (E)); Error := Gnat.Sockets.Thin.Socket_Errno; Text_IO.Put_Line(Integer'Image(Error) & " - " ) ; --& -- Gnat.Sockets.Thin.Socket_Error_Message (Error)); Text_IO.Put_Line("Resolve_Exception" & " - " & Gnat.Sockets.Error_Type'Image(Gnat.Sockets.Resolve_Exception(E))); Gnat.Sockets.Finalize; end Socket_Connect; A DESCRIPTION OF THE EXPECTED BEHAVIOR; I'd like an output like this: C:\Temp>socket_connect Task running, Execute! Startup sockets Get a socket Try to connect! GNAT.SOCKETS.SOCKET_ERROR: [10061] Connection refused 10061 - Resolve_Exception - CONNECTION_REFUSED Note the second last line, printed by a call to Gnat.Sockets.Thin.Socket_Errno. I get the behavior when I comment out the task type. (well not the 'Task running, Execute' of course) A DESCRIPTION OF ACTUAL BEHAVIOR. C:\Temp>socket_connect Task running, Execute! Startup sockets Get a socket Try to connect! GNAT.SOCKETS.SOCKET_ERROR: [10061] Connection refused 0 - Resolve_Exception - CONNECTION_REFUSED Note the second last line, printed by a call to Gnat.Sockets.Thin.Socket_Errno. This time there's no error! This behavior occurs when any task at all is involved. If I write my own socket biding, and call WSAGetLastError (as Gnat.Sockets.Thin.Socket_Errno does) I still have this behavior. So I can recognize a socketerror, via the fact that c-socket function return -1 on error but NOT find the reason, unless I use Gnat.sockets, and mask the error out from the exception, which breaks socket code not written unsing Gnat.Sockets /Björn -- Summary: Windows errorcodes wrong in Ada when tasking Product: gcc Version: 3.4.2 Status: UNCONFIRMED Severity: normal Priority: P2 Component: ada AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: b201 at passagen dot se CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19526