Benoît Minisini ha scritto:
>>> 2010/1/2 Benoît Minisini <gam...@users.sourceforge.net>:
>>>       
>>>> Please provide the source code of the network communication,
>>>> otherwise I can't see what you are doing exactly.
>>>>         
>> Ok, here is some code that adequately reproduces the problem, and the
>> exact same code with a smaller chunk of text that does not have the
>> problem.
>>
>> SocketOK works.
>>
>> ChokeASocket is exactly 100% the same code except that it has a 48k
>> file to transmit to the remote server.
>>
>> The remote server is already setup in the code so just run it. I
>> recommend running SocketOK first. I have tried this with four
>> independent servers and get the same result, SocketDeath.
>>
>> Regards,
>>
>>     
>
> OK, I identified the problem:
>
> By default, Socket are in non-blocking mode (Blocking property set to False). 
> So writing to it a big chunk fails. The bug is that instead of raising an 
> error during the Write instruction, it fails silently.
>
> By having a blocking socket, your program works.
>
> So, two remarks:
>
> You should set the Blocking property to True in the Ready event.
>
> Maybe the Write instruction is silly: if the user wants to write a big chunk 
> of bytes, we should temporarily enter blocking mode while writing. Or not?
>   
I could only say that "big chunk" is something very uncertain - may be 
4096 bytes or 3. And that turning on or off the blocking mode should be, 
I think, never done automatically. May be that a timeout parameter could 
circumvent the problem, but again it is a bet. I mean, a timeout is a 
semi-blocking mode, but after a timeout occurs, one can only assume that 
the entire write has failed, even if, in fact, some data has been 
succefully written.
> It is not evident, because you may want to write on the socket only during 
> its 
> Write event and need to never block. The problem is you can't know how many 
> bytes to send without sending them, and Gambas at the moment does not tell 
> how 
> many bytes were successfully sent to the socket in one shot.
>
> Or maybe Socket must be blocking by default?
>
> Some thinking is needed there...
>
>   


-- 
Doriano Blengino

"Listen twice before you speak.
This is why we have two ears, but only one mouth."


------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user

Reply via email to