Feature #8871

Server side TCP fast open

Added by Masaki Matsushita 8 months ago. Updated 8 months ago.

[ruby-core:57048]
Status:Closed
Priority:Normal
Assignee:-
Category:ext
Target version:2.1.0

Description

I propose that ruby support server side TCP fast open (TFO).
TCP fast open reduces step of the handshake process.

detailed information about TCP fast open: http://lwn.net/Articles/508865/

example

server side

require "socket"

serv = Socket.new(Socket::AFINET, Socket::SOCKSTREAM)
serv.setsockopt(Socket::SOLTCP, Socket::TCPFASTOPEN, 5)
addrinfo = Addrinfo.new(Socket.sockaddr_in(8888, "localhost"))
serv.bind(addrinfo)
serv.listen(1)

loop do
socket, addrinfo = serv.accept
p socket, addrinfo
p socket.gets
end

client side (Python)

#!/usr/bin/env python

import sys, socket

HOST = "localhost"
PORT = 8888

TCPFASTOPEN = 23
MSG
FASTOPEN = 0x20000000

s = socket.socket(socket.AFINET, socket.SOCKSTREAM)

sendto with MSG_FASTOPEN flag

s.sendto("Hello, world!", MSG_FASTOPEN, (HOST, PORT))
s.close()

tcpdump result

% sudo tcpdump -i lo port 8888

without TFO

00:46:43.029704 IP localhost.35653 > localhost.8888: Flags [S], seq 1189386786, win 43690, options [mss 65495,sackOK,TS val 476896037 ecr 0,nop,wscale 7], length 0
00:46:43.029735 IP localhost.35653 > localhost.8888: Flags [.], ack 2201113579, win 342, options [nop,nop,TS val 476896037 ecr 476896037], length 0
00:46:43.029782 IP localhost.35653 > localhost.8888: Flags [P.], seq 0:13, ack 1, win 342, options [nop,nop,TS val 476896037 ecr 476896037], length 13
00:46:43.029808 IP localhost.35653 > localhost.8888: Flags [F.], seq 13, ack 1, win 342, options [nop,nop,TS val 476896037 ecr 476896037], length 0

4 packets captured
8 packets received by filter
0 packets dropped by kernel

with TFO

00:47:01.787766 IP localhost.36567 > localhost.8888: Flags [S], seq 2471392232:2471392245, win 43690, options [mss 65495,sackOK,TS val 476900726 ecr 0,nop,wscale 7,Unknown Option 254f989ccf497eb7eb6ea2e], length 13
00:47:01.787814 IP localhost.36567 > localhost.8888: Flags [.], ack 874717749, win 342, options [nop,nop,TS val 476900726 ecr 476900726], length 0
00:47:01.788029 IP localhost.36567 > localhost.8888: Flags [F.], seq 0, ack 1, win 342, options [nop,nop,TS val 476900726 ecr 476900726], length 0

3 packets captured
6 packets received by filter
0 packets dropped by kernel

patch.diff Magnifier (504 Bytes) Masaki Matsushita, 09/07/2013 01:05 AM


Related issues

Related to ruby-trunk - Feature #8897: client side TCP fast open Closed 09/11/2013

Associated revisions

Revision 42865
Added by Akira Tanaka 8 months ago

  • ext/socket/mkconstants.rb (TCP_FASTOPEN): Defined for TCP fast open. [Feature #8871] patch by Masaki Matsushita.

History

#1 Updated by Eric Wong 8 months ago

"Glass_saga (Masaki Matsushita)" glass.saga@gmail.com wrote:

https://bugs.ruby-lang.org/issues/8871

I propose that ruby support server side TCP fast open (TFO).
TCP fast open reduces step of the handshake process.

Yes. It should be an easy change.

TCPFASTOPEN = 23
MSG
FASTOPEN = 0x20000000

I think we only need to add two constants to ext/socket/mkconstants.rb
(I haven't bothered updating my system headers, yet, but it should be
easy to test).

#2 Updated by Akira Tanaka 8 months ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r42865.
Masaki, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • ext/socket/mkconstants.rb (TCP_FASTOPEN): Defined for TCP fast open. [Feature #8871] patch by Masaki Matsushita.

Also available in: Atom PDF