[email protected] | 3871252 | 2011-04-18 23:03:32 | [diff] [blame] | 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_WIN_H_ | ||||
6 | #define NET_SOCKET_TCP_SERVER_SOCKET_WIN_H_ | ||||
7 | |||||
8 | #include <winsock2.h> | ||||
9 | |||||
[email protected] | e57a716 | 2011-06-15 04:14:23 | [diff] [blame] | 10 | #include "base/memory/scoped_ptr.h" |
[email protected] | 3871252 | 2011-04-18 23:03:32 | [diff] [blame] | 11 | #include "base/message_loop.h" |
[email protected] | 3871252 | 2011-04-18 23:03:32 | [diff] [blame] | 12 | #include "base/win/object_watcher.h" |
13 | #include "base/threading/non_thread_safe.h" | ||||
[email protected] | df7a30d | 2011-12-03 04:16:50 | [diff] [blame] | 14 | #include "net/base/completion_callback.h" |
[email protected] | 3871252 | 2011-04-18 23:03:32 | [diff] [blame] | 15 | #include "net/base/net_log.h" |
16 | #include "net/socket/server_socket.h" | ||||
17 | |||||
18 | namespace net { | ||||
19 | |||||
20 | class IPEndPoint; | ||||
21 | |||||
[email protected] | 172da1b | 2011-08-12 15:52:26 | [diff] [blame] | 22 | class NET_EXPORT_PRIVATE TCPServerSocketWin |
[email protected] | f898601 | 2011-05-19 21:53:58 | [diff] [blame] | 23 | : public ServerSocket, |
24 | NON_EXPORTED_BASE(public base::NonThreadSafe), | ||||
25 | public base::win::ObjectWatcher::Delegate { | ||||
[email protected] | 3871252 | 2011-04-18 23:03:32 | [diff] [blame] | 26 | public: |
27 | TCPServerSocketWin(net::NetLog* net_log, | ||||
28 | const net::NetLog::Source& source); | ||||
29 | ~TCPServerSocketWin(); | ||||
30 | |||||
31 | // net::ServerSocket implementation. | ||||
32 | virtual int Listen(const net::IPEndPoint& address, int backlog); | ||||
33 | virtual int GetLocalAddress(IPEndPoint* address) const; | ||||
[email protected] | 3268023f | 2011-05-05 00:08:10 | [diff] [blame] | 34 | virtual int Accept(scoped_ptr<StreamSocket>* socket, |
[email protected] | df7a30d | 2011-12-03 04:16:50 | [diff] [blame] | 35 | const CompletionCallback& callback); |
[email protected] | 3871252 | 2011-04-18 23:03:32 | [diff] [blame] | 36 | |
37 | // base::ObjectWatcher::Delegate implementation. | ||||
38 | virtual void OnObjectSignaled(HANDLE object); | ||||
39 | |||||
40 | private: | ||||
[email protected] | 3268023f | 2011-05-05 00:08:10 | [diff] [blame] | 41 | int AcceptInternal(scoped_ptr<StreamSocket>* socket); |
[email protected] | 3871252 | 2011-04-18 23:03:32 | [diff] [blame] | 42 | void Close(); |
43 | |||||
44 | SOCKET socket_; | ||||
45 | HANDLE socket_event_; | ||||
46 | |||||
47 | base::win::ObjectWatcher accept_watcher_; | ||||
48 | |||||
[email protected] | 3268023f | 2011-05-05 00:08:10 | [diff] [blame] | 49 | scoped_ptr<StreamSocket>* accept_socket_; |
[email protected] | df7a30d | 2011-12-03 04:16:50 | [diff] [blame] | 50 | CompletionCallback accept_callback_; |
[email protected] | 3871252 | 2011-04-18 23:03:32 | [diff] [blame] | 51 | |
52 | BoundNetLog net_log_; | ||||
53 | }; | ||||
54 | |||||
55 | } // namespace net | ||||
56 | |||||
57 | #endif // NET_SOCKET_TCP_SERVER_SOCKET_WIN_H_ |