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_libevent.h" | 5 #include "net/udp/udp_socket_libevent.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <fcntl.h> | 8 #include <fcntl.h> |
9 #include <netdb.h> | 9 #include <netdb.h> |
10 #include <sys/socket.h> | 10 #include <sys/socket.h> |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 DCHECK_NE(rv, ERR_IO_PENDING); | 320 DCHECK_NE(rv, ERR_IO_PENDING); |
321 DCHECK(!write_callback_.is_null()); | 321 DCHECK(!write_callback_.is_null()); |
322 | 322 |
323 // since Run may result in Write being called, clear write_callback_ up front. | 323 // since Run may result in Write being called, clear write_callback_ up front. |
324 CompletionCallback c = write_callback_; | 324 CompletionCallback c = write_callback_; |
325 write_callback_.Reset(); | 325 write_callback_.Reset(); |
326 c.Run(rv); | 326 c.Run(rv); |
327 } | 327 } |
328 | 328 |
329 void UDPSocketLibevent::DidCompleteRead() { | 329 void UDPSocketLibevent::DidCompleteRead() { |
330 int result = InternalRecvFrom(read_buf_, read_buf_len_, recv_from_address_); | 330 int result = |
| 331 InternalRecvFrom(read_buf_.get(), read_buf_len_, recv_from_address_); |
331 if (result != ERR_IO_PENDING) { | 332 if (result != ERR_IO_PENDING) { |
332 read_buf_ = NULL; | 333 read_buf_ = NULL; |
333 read_buf_len_ = 0; | 334 read_buf_len_ = 0; |
334 recv_from_address_ = NULL; | 335 recv_from_address_ = NULL; |
335 bool ok = read_socket_watcher_.StopWatchingFileDescriptor(); | 336 bool ok = read_socket_watcher_.StopWatchingFileDescriptor(); |
336 DCHECK(ok); | 337 DCHECK(ok); |
337 DoReadCallback(result); | 338 DoReadCallback(result); |
338 } | 339 } |
339 } | 340 } |
340 | 341 |
(...skipping 30 matching lines...) Expand all Loading... |
371 return MapSystemError(errno); | 372 return MapSystemError(errno); |
372 if (SetNonBlocking(socket_)) { | 373 if (SetNonBlocking(socket_)) { |
373 const int err = MapSystemError(errno); | 374 const int err = MapSystemError(errno); |
374 Close(); | 375 Close(); |
375 return err; | 376 return err; |
376 } | 377 } |
377 return OK; | 378 return OK; |
378 } | 379 } |
379 | 380 |
380 void UDPSocketLibevent::DidCompleteWrite() { | 381 void UDPSocketLibevent::DidCompleteWrite() { |
381 int result = InternalSendTo(write_buf_, write_buf_len_, | 382 int result = |
382 send_to_address_.get()); | 383 InternalSendTo(write_buf_.get(), write_buf_len_, send_to_address_.get()); |
383 | 384 |
384 if (result != ERR_IO_PENDING) { | 385 if (result != ERR_IO_PENDING) { |
385 write_buf_ = NULL; | 386 write_buf_ = NULL; |
386 write_buf_len_ = 0; | 387 write_buf_len_ = 0; |
387 send_to_address_.reset(); | 388 send_to_address_.reset(); |
388 write_socket_watcher_.StopWatchingFileDescriptor(); | 389 write_socket_watcher_.StopWatchingFileDescriptor(); |
389 DoWriteCallback(result); | 390 DoWriteCallback(result); |
390 } | 391 } |
391 } | 392 } |
392 | 393 |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 if (is_connected()) | 631 if (is_connected()) |
631 return ERR_SOCKET_IS_CONNECTED; | 632 return ERR_SOCKET_IS_CONNECTED; |
632 | 633 |
633 if (loopback) | 634 if (loopback) |
634 socket_options_ |= SOCKET_OPTION_MULTICAST_LOOP; | 635 socket_options_ |= SOCKET_OPTION_MULTICAST_LOOP; |
635 else | 636 else |
636 socket_options_ &= ~SOCKET_OPTION_MULTICAST_LOOP; | 637 socket_options_ &= ~SOCKET_OPTION_MULTICAST_LOOP; |
637 return OK; | 638 return OK; |
638 } | 639 } |
639 } // namespace net | 640 } // namespace net |
OLD | NEW |