OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 #include "net/udp/udp_socket_win.h" | 5 #include "net/udp/udp_socket_win.h" |
6 | 6 |
7 #include <mstcpip.h> | 7 #include <mstcpip.h> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 return MapSystemError(WSAGetLastError()); | 289 return MapSystemError(WSAGetLastError()); |
290 if (!use_non_blocking_io_) { | 290 if (!use_non_blocking_io_) { |
291 core_ = new Core(this); | 291 core_ = new Core(this); |
292 } else { | 292 } else { |
293 read_write_event_.Set(WSACreateEvent()); | 293 read_write_event_.Set(WSACreateEvent()); |
294 WSAEventSelect(socket_, read_write_event_.Get(), FD_READ | FD_WRITE); | 294 WSAEventSelect(socket_, read_write_event_.Get(), FD_READ | FD_WRITE); |
295 } | 295 } |
296 return OK; | 296 return OK; |
297 } | 297 } |
298 | 298 |
299 void UDPSocketWin::Close() { | 299 int UDPSocketWin::Close() { |
300 DCHECK(CalledOnValidThread()); | 300 DCHECK(CalledOnValidThread()); |
301 | 301 |
302 if (socket_ == INVALID_SOCKET) | 302 if (socket_ == INVALID_SOCKET) |
303 return; | 303 return OK; |
304 | 304 |
305 if (qos_handle_) { | 305 if (qos_handle_) { |
306 QwaveAPI::Get().CloseHandle(qos_handle_); | 306 QwaveAPI::Get().CloseHandle(qos_handle_); |
307 } | 307 } |
308 | 308 |
309 // Zero out any pending read/write callback state. | 309 // Zero out any pending read/write callback state. |
310 read_callback_.Reset(); | 310 read_callback_.Reset(); |
311 recv_from_address_ = NULL; | 311 recv_from_address_ = NULL; |
312 write_callback_.Reset(); | 312 write_callback_.Reset(); |
313 | 313 |
314 base::TimeTicks start_time = base::TimeTicks::Now(); | 314 base::TimeTicks start_time = base::TimeTicks::Now(); |
315 closesocket(socket_); | 315 int result = MapSystemError(closesocket(socket_)); |
316 UMA_HISTOGRAM_TIMES("Net.UDPSocketWinClose", | 316 UMA_HISTOGRAM_TIMES("Net.UDPSocketWinClose", |
317 base::TimeTicks::Now() - start_time); | 317 base::TimeTicks::Now() - start_time); |
318 socket_ = INVALID_SOCKET; | 318 socket_ = INVALID_SOCKET; |
319 addr_family_ = 0; | 319 addr_family_ = 0; |
320 is_connected_ = false; | 320 is_connected_ = false; |
321 | 321 |
322 read_write_watcher_.StopWatching(); | 322 read_write_watcher_.StopWatching(); |
323 read_write_event_.Close(); | 323 read_write_event_.Close(); |
324 | 324 |
325 if (core_) { | 325 if (core_) { |
326 core_->Detach(); | 326 core_->Detach(); |
327 core_ = NULL; | 327 core_ = NULL; |
328 } | 328 } |
| 329 |
| 330 return result; |
329 } | 331 } |
330 | 332 |
331 int UDPSocketWin::GetPeerAddress(IPEndPoint* address) const { | 333 int UDPSocketWin::GetPeerAddress(IPEndPoint* address) const { |
332 DCHECK(CalledOnValidThread()); | 334 DCHECK(CalledOnValidThread()); |
333 DCHECK(address); | 335 DCHECK(address); |
334 if (!is_connected()) | 336 if (!is_connected()) |
335 return ERR_SOCKET_NOT_CONNECTED; | 337 return ERR_SOCKET_NOT_CONNECTED; |
336 | 338 |
337 // TODO(szym): Simplify. http://crbug.com/126152 | 339 // TODO(szym): Simplify. http://crbug.com/126152 |
338 if (!remote_address_.get()) { | 340 if (!remote_address_.get()) { |
(...skipping 834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1173 void UDPSocketWin::DetachFromThread() { | 1175 void UDPSocketWin::DetachFromThread() { |
1174 base::NonThreadSafe::DetachFromThread(); | 1176 base::NonThreadSafe::DetachFromThread(); |
1175 } | 1177 } |
1176 | 1178 |
1177 void UDPSocketWin::UseNonBlockingIO() { | 1179 void UDPSocketWin::UseNonBlockingIO() { |
1178 DCHECK(!core_); | 1180 DCHECK(!core_); |
1179 use_non_blocking_io_ = true; | 1181 use_non_blocking_io_ = true; |
1180 } | 1182 } |
1181 | 1183 |
1182 } // namespace net | 1184 } // namespace net |
OLD | NEW |