Thanks a lot.

On Wed, 2010-12-08 at 16:18 +0800, Chun Tian (binghe) wrote:
> 在 2010-12-8,15:54, Kamil Shakirov 写道:
> 
> > Hi Chun,
> > 
> > On Wed, 2010-12-08 at 14:30 +0800, Chun Tian (binghe) wrote:
> >> Hi, there
> >> 
> >> So, you want to override the default read time (when creating the usocket) 
> >> sometime when you're calling SOCKET-RECEIVE. OK, extra keyword parameter 
> >> is just for platform specific needs, you patch accepted as r571.
> > 
> > Thanks. In the current API neither socket-connect nor socket-receive
> > methods use a timeout parameter for a datagram socket in LispWorks
> > backend.
> 
> Oh my god, this is a bug, or feature lost.  SOCKET-CONNECT *should* pass its 
> keyword argument TIMEOUT to underlying UDP functions as a READ-TIMEOUT. The 
> fact is not, I've fixed this now.
> 
> You may thought the TIMEOUT argument of SOCKET-CONNECT is a "connection 
> timeout", but unfortunately we cannot control this, at least not on all 
> supported platform (only Clozure CL support :read-timeout when doing TCP 
> connections, never check how this is done).  For TCP sockets, the TIMEOUT 
> value will be passed to stream creation functions and will be the "read 
> timeout" when user operating on those TCP streams.  For UDP sockets, it 
> should be treated as "read timeout", since we cannot control or usually no 
> need to control "write timeout". Any way, I just follow the exist USOCKET API 
> to fit UDP needs.
> 
> I committed another fixes for this (r572), which passed following simple test:
> 
> CL-USER 7 > (usocket:socket-connect "localhost" 10000 :timeout 3 :protocol 
> :datagram)
> #<USOCKET:DATAGRAM-USOCKET 200A5973>
> 
> CL-USER 8 > (usocket::get-socket-receive-timeout (usocket:socket *))
> 3.0
> 
> CL-USER 9 > (usocket:socket-connect "localhost" 10001 :protocol :datagram)
> #<USOCKET:DATAGRAM-USOCKET 200B83EB>
> 
> CL-USER 10 > (usocket::get-socket-receive-timeout (usocket:socket *))
> 0.0
> 
> (above just show client-side UDP, but server-side UDP should work in the same 
> way)
> 
> I still need to check all supported platform, and do the same thing. Hope 
> this change could work for your current need.
> 
> Regards,
> 
> Chun Tian (binghe)
> 
> > 
> >> But if you take a look at my implementation of SOCKET-RECEIVE, you'll find 
> >> the "temp" TIMEOUT keyword argument will be set into underlying socket by 
> >> "setsockopt", and the previous default value will be set back when 
> >> SOCKET-RECEIVE finishing it's work.  Due to such double costs, I think 
> >> this feature should not be used to much.
> >> In next USOCKET versions, I'll provide a SOCKET-OPTION generic function to 
> >> be able to set most socket options (include RCVTIMEO) after sockets were 
> >> created, I hope this could fit your needs better.
> > 
> > That would be the best way to control socket options. 
> 

--ska


_______________________________________________
usocket-devel mailing list
usocket-devel@common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel

Reply via email to