Feature #8871
closedServer side TCP fast open
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::AF_INET, Socket::SOCK_STREAM)
serv.setsockopt(Socket::SOL_TCP, Socket::TCP_FASTOPEN, 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
TCP_FASTOPEN = 23
MSG_FASTOPEN = 0x20000000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
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
Files