[gnutls-devel] TCP Fast Open
tim.ruehsen at gmx.de
Wed Jul 13 13:09:59 CEST 2016
On Wednesday, July 13, 2016 9:28:28 AM CEST Nikos Mavrogiannopoulos wrote:
> On Tue, Jul 12, 2016 at 5:33 PM, Tim Ruehsen <tim.ruehsen at gmx.de> wrote:
> > Hi,
> > I just wanted to mention that I recently added TFO in Wget2 using GnuTLS
> > (tested on Linux, speedup ~ 1xRTT).
> Hi Tim,
> That sounds great. Did you combine that with other optimizations such
> as session resumption and false start?
My solution would work for both, but I didn't implement these optimizations -
I simply wasn't aware of them. Thanks for pointing out, I'll investigate...
> > Is there any interest in a gnutls_ helper function ?
> Certainly. I have not a good overview of the changes required, but as
> I understand from your description we would have to handle the
> connect()/sendmsg() steps within gnutls and its callbacks. As you have
> a better overview, I'd suggest that you make a proposal on what you
> think is the simplest.
We need addr/addrlen as addition to the socket descriptor before the first
write. Both would be stored best within the 'session' structure. We also would
need a helper flag to indicate if a write is the first one or not.
> > What I do now is setting my own vec_push function + transport pointer.
> > In the vec_push function I use sendmsg() with MSG_FASTOPEN and fallback to
> > connect/writev on errno=EOPNOTSUPP (ups, just see that I didn't test the
> > fallback yet). At this point we need the sockaddr + sockaddrlen of the
> > socket descriptor.
> > From here on I set the vec_push function and the transport pointer 'back
> > to
> > normal', which is writev and a socket descriptor.
> > If there is interest, what would be the best place to add a function for
> > this ?
> > It should be something like
> > gnutls_transport_set_int_tfo(tcp->ssl_session, tcp->sockfd, sockaddr
> > *addr,
> > socklen_t *addrlen);
> That sounds reasonable.
I'll see if I find some time this afternoon to implement a show case to test
with (function + usage in gnutls-cli).
> > Or is there any way retrieve addr/addrlen from the socket descriptor ?
> As far as I know you can get these from already connected sockets.
If the socket is already connected, the time for TFO is already over :-)
I couldn't find/remember a way to set the destination address without a
connect() or sendto()/sendmsg(). If we had such a possibility, we would just
need a function to switch TFO on/off for a session.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 819 bytes
Desc: This is a digitally signed message part.
More information about the Gnutls-devel