158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef NET_SOCKET_TCP_SOCKET_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define NET_SOCKET_TCP_SOCKET_H_
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "build/build_config.h"
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "net/base/net_export.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN)
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "net/socket/tcp_socket_win.h"
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#elif defined(OS_POSIX)
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "net/socket/tcp_socket_libevent.h"
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace net {
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// TCPSocket provides a platform-independent interface for TCP sockets.
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// It is recommended to use TCPClientSocket/TCPServerSocket instead of this
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// class, unless a clear separation of client and server socket functionality is
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// not suitable for your use case (e.g., a socket needs to be created and bound
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// before you know whether it is a client or server socket).
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN)
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef TCPSocketWin TCPSocket;
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#elif defined(OS_POSIX)
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef TCPSocketLibevent TCPSocket;
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Check if TCP FastOpen is supported by the OS.
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool IsTCPFastOpenSupported();
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Check if TCP FastOpen is enabled by the user.
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool IsTCPFastOpenUserEnabled();
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Checks if TCP FastOpen is supported by the kernel. Also enables TFO for all
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// connections if indicated by user.
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Not thread safe.  Must be called during initialization/startup only.
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciNET_EXPORT void CheckSupportAndMaybeEnableTCPFastOpen(bool user_enabled);
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace net
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // NET_SOCKET_TCP_SOCKET_H_
45