Re: Problem with select/5 on AF_INET sockets with Windows 7

Paulo Moura <[email protected]> Thu, 19 Feb 2015 19:00:28 +0000
Newsgroups gmane.comp.gnu.prolog.bugs
Message-ID <[email protected]>
> On 19/02/2015, at 18:58, Fx <[email protected]> wrote:
> =

> Daniel,
> =

> Thank you very much for your answer, and this is a great news for 1.4.5 !=
!!
> =

> I=92ll be patient and wait for the official distribution.

Don't be patient. Help instead beta-testing 1.4.5.

Cheers,

Paulo


> Le 17 f=E9vr. 2015 =E0 13:32, Daniel Diaz <[email protected]> a =
=E9crit :
> =

>> Hi,
>> =

>> sorry for the late reply. Thank you for this bug report.
>> =

>> The bug is fixed in the last git version. Will be fixed in next 1.4.5
>> =

>> Daniel
>> =

>> =

>> =

>> Le 27/01/2015 12:44, [email protected] a =E9crit :
>>> Dear Daniel,
>>> =

>>> I am working on a specific http server for gnu prolog (1.4.4), and i di=
scovered
>>> a strange comportment under windows 7 (32) with the select/5 predicate.
>>> =

>>> The simple test below works fine on a OSX (maybe all unix) system but w=
ill
>>> return a system error under Windos 7 (32) , "Bad File Descriptor":
>>> =

>>> ERROR : Failed to start server : error(system_error(Bad file
>>> descriptor),select/5)
>>> =

>>> To test, launch one of the two test cases and open an internet browser =
to
>>> http://127.0.0.1:8080/ for example, or change the 127.0.0.1 by your IP.
>>> =

>>> %- Program Test with Select -----------------------------------
>>> =

>>> worker_run(Socket, Client, StreamIn, StreamOut):- write('i am a working=
 worker
>>> ...'), nl.
>>> =

>>> server_test_with_select:-
>>> 	socket('AF_INET', Socket),
>>> 	socket_bind(Socket, 'AF_INET'(Host, 8080)),
>>> 	socket_listen(Socket,10),
>>> 	catch( 	server_loop_with_select(Socket),E,
>>> 		 ( 	socket_close(Socket),
>>> 			format( "ERROR : Failed to start server : ~w~n", [E] )
>>> 	)).
>>> =

>>> server_loop_with_select(Socket):-
>>> 	repeat,
>>> 		select([Socket],ReadyReads,[Socket],[],0),
>>> 		worker_run(Socket, Client, StreamIn, StreamOut),
>>> 	fail.
>>> =

>>> %- End of Program Test with Select -----------------------------------
>>> =

>>> When not using usefull select/5 and directly use the socket_accept/4 pr=
edicate
>>> the server works well.
>>> =

>>> =

>>> %- Program Test without Select -----------------------------------
>>> =

>>> worker_run(Socket, Client, StreamIn, StreamOut):- write('i am a working=
 worker
>>> ...'), nl.
>>> =

>>> server_test_without_select:-
>>> 	socket('AF_INET', Socket),
>>> 	socket_bind(Socket, 'AF_INET'(Host, 8080)),
>>> 	socket_listen(Socket,10),
>>> 	catch( 	server_loop_without_select(Socket),E,
>>> 		 ( 	socket_close(Socket),
>>> 			format( "ERROR : Failed to start server : ~w~n", [E] )
>>> 	)).
>>> =

>>> server_loop_without_select(Socket):-
>>> 	repeat,
>>> 		socket_accept(Socket, Client, StreamIn, StreamOut),
>>> 		worker_run(Socket, Client, StreamIn, StreamOut),
>>> 	fail.
>>> =

>>> %- End of Program Test without Select ---------------------------------=
--
>>> =

>>> =

>>> Is it a known bug and did you plan to fix it in a future version ?
>>> =

>>> =

>>> Best Regards,
>>> =

>>> Fx NION.
>>> =

>>> =

>>> _______________________________________________
>>> Bug-prolog mailing list
>>> [email protected]
>>> https://lists.gnu.org/mailman/listinfo/bug-prolog
>>> =

>> =

>> =

>> -- =

>> Ce message a ete verifie par MailScanner
>> pour des virus ou des polluriels et rien de
>> suspect n'a ete trouve.
>> =

> =

> =

> _______________________________________________
> Bug-prolog mailing list
> [email protected]
> https://lists.gnu.org/mailman/listinfo/bug-prolog

-----------------------------------------------------------------
Paulo Moura
Logtalk developer

Email: <mailto:[email protected]>
Web:   <http://logtalk.org/>
-----------------------------------------------------------------