Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: net/udp/udp_socket_libevent.h

Issue 6658027: UDP sockets implementation for windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NET_UDP_UDP_SOCKET_LIBEVENT_H_ 5 #ifndef NET_UDP_UDP_SOCKET_LIBEVENT_H_
6 #define NET_UDP_UDP_SOCKET_LIBEVENT_H_ 6 #define NET_UDP_UDP_SOCKET_LIBEVENT_H_
7 #pragma once 7 #pragma once
8 8
9 // UDPSocketLibevent
10 // Accessor API for a UDP socket in either client or server form.
11 //
12 // Client form:
13 // In this case, we're connecting to a specific server, so the client will
14 // usually use:
15 // Connect(address) // Connect to a UDP server
16 // Read/Write // Reads/Writes all go to a single destination
17 //
18 // Server form:
19 // In this case, we want to read/write to many clients which are connecting
20 // to this server. First the server 'binds' to an addres, then we read from
21 // clients and write responses to them.
22 // Example:
23 // Bind(address/port) // Binds to port for reading from clients
24 // RecvFrom/SendTo // Each read can come from a different client
25 // // Writes need to be directed to a specific
26 // // address.
27
28 #include "base/message_loop.h" 9 #include "base/message_loop.h"
29 #include "base/ref_counted.h" 10 #include "base/ref_counted.h"
30 #include "base/scoped_ptr.h" 11 #include "base/scoped_ptr.h"
31 #include "base/threading/non_thread_safe.h" 12 #include "base/threading/non_thread_safe.h"
32 #include "net/base/completion_callback.h" 13 #include "net/base/completion_callback.h"
33 #include "net/base/ip_endpoint.h" 14 #include "net/base/ip_endpoint.h"
34 #include "net/base/net_log.h" 15 #include "net/base/net_log.h"
35 #include "net/socket/client_socket.h" 16 #include "net/socket/client_socket.h"
36 #include "net/udp/datagram_socket.h"
37 17
38 namespace net { 18 namespace net {
39 19
40 class BoundNetLog; 20 class BoundNetLog;
41 21
42 class UDPSocketLibevent : public base::NonThreadSafe { 22 class UDPSocketLibevent : public base::NonThreadSafe {
43 public: 23 public:
44 UDPSocketLibevent(net::NetLog* net_log, 24 UDPSocketLibevent(net::NetLog* net_log,
45 const net::NetLog::Source& source); 25 const net::NetLog::Source& source);
46 virtual ~UDPSocketLibevent(); 26 virtual ~UDPSocketLibevent();
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 // If ERR_IO_PENDING is returned, the caller must keep |buf| and |address| 86 // If ERR_IO_PENDING is returned, the caller must keep |buf| and |address|
107 // alive until the callback is called. 87 // alive until the callback is called.
108 int SendTo(IOBuffer* buf, 88 int SendTo(IOBuffer* buf,
109 int buf_len, 89 int buf_len,
110 const IPEndPoint& address, 90 const IPEndPoint& address,
111 CompletionCallback* callback); 91 CompletionCallback* callback);
112 92
113 // Returns true if the socket is already connected or bound. 93 // Returns true if the socket is already connected or bound.
114 bool is_connected() const { return socket_ != kInvalidSocket; } 94 bool is_connected() const { return socket_ != kInvalidSocket; }
115 95
116 IPEndPoint* local_address() { return local_address_.get(); }
117
118 private: 96 private:
119 static const int kInvalidSocket = -1; 97 static const int kInvalidSocket = -1;
120 98
121 class ReadWatcher : public MessageLoopForIO::Watcher { 99 class ReadWatcher : public MessageLoopForIO::Watcher {
122 public: 100 public:
123 explicit ReadWatcher(UDPSocketLibevent* socket) : socket_(socket) {} 101 explicit ReadWatcher(UDPSocketLibevent* socket) : socket_(socket) {}
124 102
125 // MessageLoopForIO::Watcher methods 103 // MessageLoopForIO::Watcher methods
126 104
127 virtual void OnFileCanReadWithoutBlocking(int /* fd */) { 105 virtual void OnFileCanReadWithoutBlocking(int /* fd */) {
(...skipping 29 matching lines...) Expand all
157 }; 135 };
158 136
159 void DoReadCallback(int rv); 137 void DoReadCallback(int rv);
160 void DoWriteCallback(int rv); 138 void DoWriteCallback(int rv);
161 void DidCompleteRead(); 139 void DidCompleteRead();
162 void DidCompleteWrite(); 140 void DidCompleteWrite();
163 141
164 // Returns the OS error code (or 0 on success). 142 // Returns the OS error code (or 0 on success).
165 int CreateSocket(const IPEndPoint& address); 143 int CreateSocket(const IPEndPoint& address);
166 144
167 int InternalRead(); 145 int InternalRead(IOBuffer* buf, int buf_len);
168 int InternalWrite(IOBuffer* buf, int buf_len); 146 int InternalWrite(IOBuffer* buf, int buf_len);
169 147
170 int socket_; 148 int socket_;
171 149
172 // These are mutable since they're just cached copies to make 150 // These are mutable since they're just cached copies to make
173 // GetPeerAddress/GetLocalAddress smarter. 151 // GetPeerAddress/GetLocalAddress smarter.
174 mutable scoped_ptr<IPEndPoint> local_address_; 152 mutable scoped_ptr<IPEndPoint> local_address_;
175 mutable scoped_ptr<IPEndPoint> remote_address_; 153 mutable scoped_ptr<IPEndPoint> remote_address_;
176 154
177 // The socket's libevent wrappers 155 // The socket's libevent wrappers
(...skipping 21 matching lines...) Expand all
199 CompletionCallback* write_callback_; 177 CompletionCallback* write_callback_;
200 178
201 BoundNetLog net_log_; 179 BoundNetLog net_log_;
202 180
203 DISALLOW_COPY_AND_ASSIGN(UDPSocketLibevent); 181 DISALLOW_COPY_AND_ASSIGN(UDPSocketLibevent);
204 }; 182 };
205 183
206 } // namespace net 184 } // namespace net
207 185
208 #endif // NET_UDP_UDP_SOCKET_LIBEVENT_H_ 186 #endif // NET_UDP_UDP_SOCKET_LIBEVENT_H_
OLDNEW
« no previous file with comments | « net/udp/udp_socket.h ('k') | net/udp/udp_socket_libevent.cc » ('j') | net/udp/udp_socket_win.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698