| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef NET_BASE_TCP_LISTEN_SOCKET_H_ |
| #define NET_BASE_TCP_LISTEN_SOCKET_H_ |
| |
| #include <string> |
| |
| #include "base/basictypes.h" |
| #include "base/memory/ref_counted.h" |
| #include "net/base/net_export.h" |
| #include "net/base/stream_listen_socket.h" |
| |
| namespace net { |
| |
| // Implements a TCP socket. Note that this is ref counted. |
| class NET_EXPORT TCPListenSocket : public StreamListenSocket { |
| public: |
| // Listen on port for the specified IP address. Use 127.0.0.1 to only |
| // accept local connections. |
| static scoped_refptr<TCPListenSocket> CreateAndListen( |
| const std::string& ip, int port, StreamListenSocket::Delegate* del); |
| |
| // Get raw TCP socket descriptor bound to ip:port. |
| static SocketDescriptor CreateAndBind(const std::string& ip, int port); |
| |
| // Get raw TCP socket descriptor bound to ip and return port it is bound to. |
| static SocketDescriptor CreateAndBindAnyPort(const std::string& ip, |
| int* port); |
| |
| protected: |
| friend class scoped_refptr<TCPListenSocket>; |
| |
| TCPListenSocket(SocketDescriptor s, StreamListenSocket::Delegate* del); |
| virtual ~TCPListenSocket(); |
| |
| // Implements StreamListenSocket::Accept. |
| virtual void Accept() override; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(TCPListenSocket); |
| }; |
| |
| // Factory that can be used to instantiate TCPListenSocket. |
| class NET_EXPORT TCPListenSocketFactory : public StreamListenSocketFactory { |
| public: |
| TCPListenSocketFactory(const std::string& ip, int port); |
| virtual ~TCPListenSocketFactory(); |
| |
| // StreamListenSocketFactory overrides. |
| virtual scoped_refptr<StreamListenSocket> CreateAndListen( |
| StreamListenSocket::Delegate* delegate) const override; |
| |
| private: |
| const std::string ip_; |
| const int port_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TCPListenSocketFactory); |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_BASE_TCP_LISTEN_SOCKET_H_ |