1// Copyright (c) 2012 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_LISTEN_SOCKET_H_ 6#define NET_SOCKET_TCP_LISTEN_SOCKET_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "net/base/net_export.h" 12#include "net/socket/socket_descriptor.h" 13#include "net/socket/stream_listen_socket.h" 14 15namespace net { 16 17// Implements a TCP socket. 18class NET_EXPORT TCPListenSocket : public StreamListenSocket { 19 public: 20 virtual ~TCPListenSocket(); 21 // Listen on port for the specified IP address. Use 127.0.0.1 to only 22 // accept local connections. 23 static scoped_ptr<TCPListenSocket> CreateAndListen( 24 const std::string& ip, int port, StreamListenSocket::Delegate* del); 25 26 // Get raw TCP socket descriptor bound to ip:port. 27 static SocketDescriptor CreateAndBind(const std::string& ip, int port); 28 29 // Get raw TCP socket descriptor bound to ip and return port it is bound to. 30 static SocketDescriptor CreateAndBindAnyPort(const std::string& ip, 31 int* port); 32 33 protected: 34 TCPListenSocket(SocketDescriptor s, StreamListenSocket::Delegate* del); 35 36 // Implements StreamListenSocket::Accept. 37 virtual void Accept() OVERRIDE; 38 39 private: 40 DISALLOW_COPY_AND_ASSIGN(TCPListenSocket); 41}; 42 43// Factory that can be used to instantiate TCPListenSocket. 44class NET_EXPORT TCPListenSocketFactory : public StreamListenSocketFactory { 45 public: 46 TCPListenSocketFactory(const std::string& ip, int port); 47 virtual ~TCPListenSocketFactory(); 48 49 // StreamListenSocketFactory overrides. 50 virtual scoped_ptr<StreamListenSocket> CreateAndListen( 51 StreamListenSocket::Delegate* delegate) const OVERRIDE; 52 53 private: 54 const std::string ip_; 55 const int port_; 56 57 DISALLOW_COPY_AND_ASSIGN(TCPListenSocketFactory); 58}; 59 60} // namespace net 61 62#endif // NET_SOCKET_TCP_LISTEN_SOCKET_H_ 63