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