Hi,

After several days of intensive tests around socket (git 1.4.5) on Windows, 
sockets seams stables.

I have maybe an explanation for the "system_error(No error) » on Windows:
     -I read somewhere that Windows didn’t support select on streams, only on 
sockets.

So i do not use select on streams. Sad but running.

Fx

Le 25 févr. 2015 à 07:30, Fx <[email protected]> a écrit :

> Hi,
> 
> I went ahead in the test, and discovered a new bug: when calling select/5 on 
> a list filled with socket Id AND input streams:
> - on Windows i get a system_error(No error).Ok, clear.
> - on Os X, no error but finally the program crash with an overflow while 
> reading another file stream during the server_process_request. 
>      - It seems like something like a stream scramble due to select, but i 
> wouldn’t bet my shirt on it.
> 
> To illustrate, let say we have the following predicate:
> 
> server_handle_connections(Socket):-
>       connection_list_read(Reads),
>       select([Socket|Reads],ReadyReads,[],[],0),
>       server_accept_incomming(Socket,ReadyReads,StreamIn,StreamOut),
>       server_process_request(StreamIn, StreamOut),!.
> 
> connection_list_read(Reads) succeeds and return a list of opened input 
> streams (filled in server_accept_incomming predicate)
> 
> server_accept_incomming(Socket,ReadyReads,StreamIn,StreamOut) succeeds when 
> ReadyReads contain Socket. 
> - It « accepts » the socket, unifying StreamIn and StreamOut, appends 
> StreamIn to a list of active connections
> 
> server_process_request(StreamIn, StreamOut) reads the request, serve the 
> requested file, and depending the test, close or not the streams.
> 
> At the first time, 
>  - only the Socket is observed by the select.( Works nice on Windows with the 
> correction made by Daniel.)
>  - the accept return a new input stream.
>  - the end of server_process_request can be viewed in to manner : it close 
> the stream, or it doesn’t close the streams.
>       - if it closes the stream, the next accept call will probably « reuse » 
> the last stream indices (as if there was no use of select, just accept): not 
> sure this is the case.
>       - if it doesn’t close the streams, the current StreamIn could be 
> observed in the next select/5 call no ? It crashes on windows, sure.
> 
> input streams are set with no buffering, according the advice in the manual.
> 
> So:
> 
> Do i use the select/5 correctly, mixing sockets and opened input streams ?
> 
> Do select/5 have a side effets on the internal stream pool (settings 
> properties for example ) ?
> 
> Did someone already use successfully select/5 on streams, to make some kinda 
> multiplexing server ?
>  -  i see a lot of examples using accept, but no one using select. we can do 
> better.
> 
> If i am not wrong in my tests, there is maybe a problem with streams and 
> select/5 on all os targets.
> 
> Fx
> 
> Le 20 févr. 2015 à 19:59, Fx <[email protected]> a écrit :
> 
>> Ok, this is a very little step, but after some adventures with installation 
>> i have some news:
>> 
>> Getting source from git reveal two bugs (and something curious maybe):
>>      - impossible to use anonymous git clone , so i fall back with getting 
>> the snapshot.
>>      - the source didn’t  contain the ‘configure’ script (i picked it up 
>> from the 1.4.4 tar to go on)
>>      - the version is still 1.4.4 (ok it’s not the end of the world).
>> 
>> I installed the MinGW on Windows 7 32 bit, in th standard manner. 
>> Fortunately my antivirus didn’t says nothing with the default a.out a.exe.
>> As si said previously, i took the « configure" file from prolog 1.4.4 source 
>> tarball
>> 
>> And last, but not least, the select/5 bug seems to belong to the past on 
>> windows (MinGW). I run again the tests wrote in this mailing list, and the
>> previous error didn’t appear anymore. 
>> 
>> It’s weak for a beta test, but it’s quite a good news. It would be nice if i 
>> had time to write some client/server tests, things like that.
>> 
>> Fx
>> 
>> 
>> Le 19 févr. 2015 à 20:40, Paulo Moura <[email protected]> a écrit :
>> 
>>>> 
>>>> On 19/02/2015, at 19:11, Fx <[email protected]> wrote:
>>>> 
>>>> :)) Paulo, you are right, if it can help. I won’t promise anything, but i 
>>>> can at least take a look, sure.
>>>> 
>>>> Can you help, and tell me where cans i found some infos:
>>>> - What are actually the tools (or info link )to compile under Windows 
>>>> (7,32b my office copmuter)
>>>> - What are actually the tools (or info link )to compile under Os X (this 
>>>> one is really rather a computer, my personnal(s) one(s)).
>>> 
>>> I cannot help you with building GNU Prolog on Windows but, on Mac OS X, 
>>> just follow the steps in the INTALL file.
>>> 
>>>> Dont’ they exists some kinda unit tests ? Prolog coded scenario ?  Or a 
>>>> Jenkins like for massive testing ?
>>> 
>>> Logtalk includes a Prolog conformance test suite but it only tests, as it 
>>> names indicates, standards related stuff. The small number of conformance 
>>> issues are known (and some of them are really limitations in the standard). 
>>> I cannot speak for Daniel, of course, but testing of other (non-standard) 
>>> features would like be more useful. Specially stuff this might behave 
>>> differently across different operating-systems (like sockets :-).
>>> 
>>> Cheers,
>>> 
>>> Paulo
>>> 
>>>> Le 19 févr. 2015 à 20:00, Paulo Moura <[email protected]> a écrit :
>>>> 
>>>>> 
>>>>>> 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’ll be patient and wait for the official distribution.
>>>>> 
>>>>> Don't be patient. Help instead beta-testing 1.4.5.
>>>>> 
>>>>> Cheers,
>>>>> 
>>>>> Paulo
>>>>> 
>>>>> 
>>>>>> Le 17 févr. 2015 à 13:32, Daniel Diaz <[email protected]> a 
>>>>>> écrit :
>>>>>> 
>>>>>>> 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 écrit :
>>>>>>>> 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
>>>>>>>> [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/>
>>>>> -----------------------------------------------------------------
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>> 
>>> -----------------------------------------------------------------
>>> Paulo Moura
>>> Logtalk developer
>>> 
>>> Email: <mailto:[email protected]>
>>> Web:   <http://logtalk.org/>
>>> -----------------------------------------------------------------
>> 
> 

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

Reply via email to