From: "Glass_saga (Masaki Matsushita)" Date: 2013-09-07T01:05:18+09:00 Subject: [ruby-core:57048] [ruby-trunk - Feature #8871][Open] Server side TCP fast open Issue #8871 has been reported by Glass_saga (Masaki Matsushita). ---------------------------------------- Feature #8871: Server side TCP fast open https://bugs.ruby-lang.org/issues/8871 Author: Glass_saga (Masaki Matsushita) Status: Open Priority: Normal Assignee: Category: ext Target version: current: 2.1.0 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 -- http://bugs.ruby-lang.org/