Home | History | Annotate | Download | only in socket
      1 // Copyright (c) 2011 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_SERVER_SOCKET_LIBEVENT_H_
      6 #define NET_SOCKET_TCP_SERVER_SOCKET_LIBEVENT_H_
      7 
      8 #include "base/message_loop.h"
      9 #include "base/scoped_ptr.h"
     10 #include "base/threading/non_thread_safe.h"
     11 #include "net/base/completion_callback.h"
     12 #include "net/base/net_log.h"
     13 #include "net/socket/server_socket.h"
     14 
     15 namespace net {
     16 
     17 class IPEndPoint;
     18 
     19 class TCPServerSocketLibevent : public ServerSocket,
     20                                 public base::NonThreadSafe,
     21                                 public MessageLoopForIO::Watcher {
     22  public:
     23   TCPServerSocketLibevent(net::NetLog* net_log,
     24                           const net::NetLog::Source& source);
     25   ~TCPServerSocketLibevent();
     26 
     27   // net::ServerSocket implementation.
     28   virtual int Listen(const net::IPEndPoint& address, int backlog);
     29   virtual int GetLocalAddress(IPEndPoint* address) const;
     30   virtual int Accept(scoped_ptr<ClientSocket>* socket,
     31                      CompletionCallback* callback);
     32 
     33   // MessageLoopForIO::Watcher implementation.
     34   virtual void OnFileCanReadWithoutBlocking(int fd);
     35   virtual void OnFileCanWriteWithoutBlocking(int fd);
     36 
     37  private:
     38   int AcceptInternal(scoped_ptr<ClientSocket>* socket);
     39   void Close();
     40 
     41   int socket_;
     42 
     43   MessageLoopForIO::FileDescriptorWatcher accept_socket_watcher_;
     44 
     45   scoped_ptr<ClientSocket>* accept_socket_;
     46   CompletionCallback* accept_callback_;
     47 
     48   BoundNetLog net_log_;
     49 };
     50 
     51 }  // namespace net
     52 
     53 #endif  // NET_SOCKET_TCP_SERVER_SOCKET_LIBEVENT_H_
     54