1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_SOCKET_SERVER_SOCKET_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_SOCKET_SERVER_SOCKET_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include <memory> 11*6777b538SAndroid Build Coastguard Worker #include <optional> 12*6777b538SAndroid Build Coastguard Worker #include <string> 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker #include "net/base/completion_once_callback.h" 15*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker namespace net { 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker class IPEndPoint; 20*6777b538SAndroid Build Coastguard Worker class StreamSocket; 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker class NET_EXPORT ServerSocket { 23*6777b538SAndroid Build Coastguard Worker public: 24*6777b538SAndroid Build Coastguard Worker ServerSocket(); 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker ServerSocket(const ServerSocket&) = delete; 27*6777b538SAndroid Build Coastguard Worker ServerSocket& operator=(const ServerSocket&) = delete; 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker virtual ~ServerSocket(); 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker // Binds the socket and starts listening. Destroys the socket to stop 32*6777b538SAndroid Build Coastguard Worker // listening. 33*6777b538SAndroid Build Coastguard Worker // |ipv6_only| can be used by inheritors to control whether the server listens 34*6777b538SAndroid Build Coastguard Worker // on IPv4/IPv6 or just IPv6 -- |true| limits connections to IPv6 only, 35*6777b538SAndroid Build Coastguard Worker // |false| allows both IPv4/IPv6 connections; leaving the value unset implies 36*6777b538SAndroid Build Coastguard Worker // default behavior (|true| on Windows, |false| on Posix). 37*6777b538SAndroid Build Coastguard Worker virtual int Listen(const IPEndPoint& address, 38*6777b538SAndroid Build Coastguard Worker int backlog, 39*6777b538SAndroid Build Coastguard Worker std::optional<bool> ipv6_only) = 0; 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker // Binds the socket with address and port, and starts listening. It expects 42*6777b538SAndroid Build Coastguard Worker // a valid IPv4 or IPv6 address. Otherwise, it returns ERR_ADDRESS_INVALID. 43*6777b538SAndroid Build Coastguard Worker virtual int ListenWithAddressAndPort(const std::string& address_string, 44*6777b538SAndroid Build Coastguard Worker uint16_t port, 45*6777b538SAndroid Build Coastguard Worker int backlog); 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker // Gets current address the socket is bound to. 48*6777b538SAndroid Build Coastguard Worker virtual int GetLocalAddress(IPEndPoint* address) const = 0; 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker // Accepts connection. Callback is called when new connection is 51*6777b538SAndroid Build Coastguard Worker // accepted. 52*6777b538SAndroid Build Coastguard Worker virtual int Accept(std::unique_ptr<StreamSocket>* socket, 53*6777b538SAndroid Build Coastguard Worker CompletionOnceCallback callback) = 0; 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker // Accepts connection. Callback is called when new connection is accepted. 56*6777b538SAndroid Build Coastguard Worker // Note: |peer_address| may or may not be populated depending on the 57*6777b538SAndroid Build Coastguard Worker // implementation. 58*6777b538SAndroid Build Coastguard Worker virtual int Accept(std::unique_ptr<StreamSocket>* socket, 59*6777b538SAndroid Build Coastguard Worker CompletionOnceCallback callback, 60*6777b538SAndroid Build Coastguard Worker IPEndPoint* peer_address); 61*6777b538SAndroid Build Coastguard Worker }; 62*6777b538SAndroid Build Coastguard Worker 63*6777b538SAndroid Build Coastguard Worker } // namespace net 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker #endif // NET_SOCKET_SERVER_SOCKET_H_ 66