Dear Daniel,
I am working on a specific http server for gnu prolog (1.4.4), and i discovered
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 will
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 predicate
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
address@hidden
https://lists.gnu.org/mailman/listinfo/bug-prolog