socket: add support for TCP fast Open
TCP Fast Open (TFO) speeds up the opening of successiveTCP) connections between two endpoints.It works by using a TFO cookie in the initial SYN packet to authenticate a previously connected client. It starts sending data to the client before the receipt of the final ACK packet of the three way handshake is received, skipping a round trip and lowering the latency in the start of transmission of data.
This commit is contained in:
committed by
Lennart Poettering
parent
41488fe902
commit
9528592ff8
@@ -481,6 +481,7 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) {
|
||||
"%sDirectoryMode: %04o\n"
|
||||
"%sKeepAlive: %s\n"
|
||||
"%sNoDelay: %s\n"
|
||||
"%sFastOpen: %s\n"
|
||||
"%sFreeBind: %s\n"
|
||||
"%sTransparent: %s\n"
|
||||
"%sBroadcast: %s\n"
|
||||
@@ -496,6 +497,7 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) {
|
||||
prefix, s->directory_mode,
|
||||
prefix, yes_no(s->keep_alive),
|
||||
prefix, yes_no(s->no_delay),
|
||||
prefix, yes_no(s->fast_open),
|
||||
prefix, yes_no(s->free_bind),
|
||||
prefix, yes_no(s->transparent),
|
||||
prefix, yes_no(s->broadcast),
|
||||
@@ -798,6 +800,12 @@ static void socket_apply_socket_options(Socket *s, int fd) {
|
||||
log_warning_unit(UNIT(s)->id, "TCP_NODELAY failed: %m");
|
||||
}
|
||||
|
||||
if (s->fast_open) {
|
||||
int b = s->fast_open;
|
||||
if (setsockopt(fd, SOL_TCP, TCP_FASTOPEN, &b, sizeof(b)) < 0)
|
||||
log_warning_unit(UNIT(s)->id, "TCP_FASTOPEN failed: %m");
|
||||
}
|
||||
|
||||
if (s->broadcast) {
|
||||
int one = 1;
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one)) < 0)
|
||||
|
||||
Reference in New Issue
Block a user