lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [lwip-users] Sockopt SND_TIMEO


From: address@hidden
Subject: Re: [lwip-users] Sockopt SND_TIMEO
Date: Wed, 13 Jan 2010 17:41:54 +0100
User-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; de; rv:1.9.1.5) Gecko/20091204 Thunderbird/3.0

Fabian Koch:
I am in the position where I would need SOCKET_SO_SNDTIMEO to have Send() at least return after a while when e.g. I unplugged the cable.
Now, I understand that sockopt is unimplemented in LwIP.
Not sockopt in general, but SO_SNDTIMEO is not implemented, that's right.
Could I achieve a similar behavior using sys_timeout()?
Hmm, don't call sys_timeout in the application thread, it won't work (and with CVS head you risk threading problems!).
Creating a timeout before calling netconn_write()/_send() and when the timer runs out, have a callback that leaves op_completed for that conn, probably with api_callback so it is executed in stack-context?
When send was sucessful, I'd call sys_untimeout() and be done with it.

Is that feasable in any way or too much fiddling around with internal states of the stack?
In general (using tcpip_(un)timeout instead of sys_(un)timeout), this might work, but *yes*, it's not wise to trust on implmentation details: your code will most definitively not work with 1.4.0 when it's working allright with 1.3.x.

Still, if you need this functionality, you not only have to signal 'op_completed' but also reset 'write_msg', 'write_offset' and 'state' (to NETCONN_NONE) - all the things do_writemore() does when it's finished.

A more sophisticated way to implement this (which might even have the potential to be included in CVS?) would be to have a timstamp when write was started and let poll_tcp() or do_writemore() check whether the operation timed out (using sys_now() to get the timestamp and compare it). If you do that, it would be nice to share the work as a patch entry on savannah.

Simon

reply via email to

[Prev in Thread] Current Thread [Next in Thread]