1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef NET_SOCKET_TCP_SOCKET_H_
6#define NET_SOCKET_TCP_SOCKET_H_
7
8#include "build/build_config.h"
9#include "net/base/net_export.h"
10
11#if defined(OS_WIN)
12#include "net/socket/tcp_socket_win.h"
13#elif defined(OS_POSIX)
14#include "net/socket/tcp_socket_libevent.h"
15#endif
16
17namespace net {
18
19// TCPSocket provides a platform-independent interface for TCP sockets.
20//
21// It is recommended to use TCPClientSocket/TCPServerSocket instead of this
22// class, unless a clear separation of client and server socket functionality is
23// not suitable for your use case (e.g., a socket needs to be created and bound
24// before you know whether it is a client or server socket).
25#if defined(OS_WIN)
26typedef TCPSocketWin TCPSocket;
27#elif defined(OS_POSIX)
28typedef TCPSocketLibevent TCPSocket;
29#endif
30
31// Check if TCP FastOpen is supported by the OS.
32bool IsTCPFastOpenSupported();
33
34// Check if TCP FastOpen is enabled by the user.
35bool IsTCPFastOpenUserEnabled();
36
37// Checks if TCP FastOpen is supported by the kernel. Also enables TFO for all
38// connections if indicated by user.
39// Not thread safe.  Must be called during initialization/startup only.
40NET_EXPORT void CheckSupportAndMaybeEnableTCPFastOpen(bool user_enabled);
41
42}  // namespace net
43
44#endif  // NET_SOCKET_TCP_SOCKET_H_
45