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/callback.h" | 9 #include "base/callback.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
608 reinterpret_cast<const char*>(&hops), sizeof(hops)); | 608 reinterpret_cast<const char*>(&hops), sizeof(hops)); |
609 if (rv < 0) | 609 if (rv < 0) |
610 return MapSystemError(WSAGetLastError()); | 610 return MapSystemError(WSAGetLastError()); |
611 } | 611 } |
612 return OK; | 612 return OK; |
613 } | 613 } |
614 | 614 |
615 int UDPSocketWin::DoBind(const IPEndPoint& address) { | 615 int UDPSocketWin::DoBind(const IPEndPoint& address) { |
616 SockaddrStorage storage; | 616 SockaddrStorage storage; |
617 if (!address.ToSockAddr(storage.addr, &storage.addr_len)) | 617 if (!address.ToSockAddr(storage.addr, &storage.addr_len)) |
618 return ERR_UNEXPECTED; | 618 return ERR_ADDRESS_INVALID; |
619 int rv = bind(socket_, storage.addr, storage.addr_len); | 619 int rv = bind(socket_, storage.addr, storage.addr_len); |
620 return rv < 0 ? MapSystemError(WSAGetLastError()) : rv; | 620 return rv < 0 ? MapSystemError(WSAGetLastError()) : rv; |
621 } | 621 } |
622 | 622 |
623 int UDPSocketWin::RandomBind(const IPEndPoint& address) { | 623 int UDPSocketWin::RandomBind(const IPEndPoint& address) { |
624 DCHECK(bind_type_ == DatagramSocket::RANDOM_BIND && !rand_int_cb_.is_null()); | 624 DCHECK(bind_type_ == DatagramSocket::RANDOM_BIND && !rand_int_cb_.is_null()); |
625 | 625 |
626 // Construct IPAddressNumber of appropriate size (IPv4 or IPv6) of 0s. | 626 // Construct IPAddressNumber of appropriate size (IPv4 or IPv6) of 0s. |
627 IPAddressNumber ip(address.address().size()); | 627 IPAddressNumber ip(address.address().size()); |
628 | 628 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 } | 713 } |
714 default: | 714 default: |
715 NOTREACHED() << "Invalid address family"; | 715 NOTREACHED() << "Invalid address family"; |
716 return ERR_ADDRESS_INVALID; | 716 return ERR_ADDRESS_INVALID; |
717 } | 717 } |
718 } | 718 } |
719 | 719 |
720 int UDPSocketWin::SetMulticastTimeToLive(int time_to_live) { | 720 int UDPSocketWin::SetMulticastTimeToLive(int time_to_live) { |
721 DCHECK(CalledOnValidThread()); | 721 DCHECK(CalledOnValidThread()); |
722 if (is_connected()) | 722 if (is_connected()) |
723 return ERR_UNEXPECTED; | 723 return ERR_SOCKET_IS_CONNECTED; |
724 | 724 |
725 if (time_to_live < 0 || time_to_live > 255) | 725 if (time_to_live < 0 || time_to_live > 255) |
726 return ERR_INVALID_ARGUMENT; | 726 return ERR_INVALID_ARGUMENT; |
727 multicast_time_to_live_ = time_to_live; | 727 multicast_time_to_live_ = time_to_live; |
728 return OK; | 728 return OK; |
729 } | 729 } |
730 | 730 |
731 int UDPSocketWin::SetMulticastLoopbackMode(bool loopback) { | 731 int UDPSocketWin::SetMulticastLoopbackMode(bool loopback) { |
732 DCHECK(CalledOnValidThread()); | 732 DCHECK(CalledOnValidThread()); |
733 if (is_connected()) | 733 if (is_connected()) |
734 return ERR_UNEXPECTED; | 734 return ERR_SOCKET_IS_CONNECTED; |
735 | 735 |
736 if (loopback) | 736 if (loopback) |
737 socket_options_ |= SOCKET_OPTION_MULTICAST_LOOP; | 737 socket_options_ |= SOCKET_OPTION_MULTICAST_LOOP; |
738 else | 738 else |
739 socket_options_ &= ~SOCKET_OPTION_MULTICAST_LOOP; | 739 socket_options_ &= ~SOCKET_OPTION_MULTICAST_LOOP; |
740 return OK; | 740 return OK; |
741 } | 741 } |
742 | 742 |
743 } // namespace net | 743 } // namespace net |
OLD | NEW |