diff options
Diffstat (limited to 'net/udp/udp_socket_win.h')
-rw-r--r-- | net/udp/udp_socket_win.h | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/net/udp/udp_socket_win.h b/net/udp/udp_socket_win.h index ce17050..807b403 100644 --- a/net/udp/udp_socket_win.h +++ b/net/udp/udp_socket_win.h @@ -115,10 +115,47 @@ class NET_EXPORT UDPSocketWin : NON_EXPORTED_BASE(public base::NonThreadSafe) { // called before Bind(). void AllowBroadcast(); + // Join the multicast group. + // |group_address| is the group address to join, could be either + // an IPv4 or IPv6 address. + // Return a network error code. + int JoinGroup(const IPAddressNumber& group_address) const; + + // Leave the multicast group. + // |group_address| is the group address to leave, could be either + // an IPv4 or IPv6 address. If the socket hasn't joined the group, + // it will be ignored. + // It's optional to leave the multicast group before destroying + // the socket. It will be done by the OS. + // Return a network error code. + int LeaveGroup(const IPAddressNumber& group_address) const; + + // Set the time-to-live option for UDP packets sent to the multicast + // group address. The default value of this option is 1. + // Cannot be negative or more than 255. + // Should be called before Bind(). + int SetMulticastTimeToLive(int time_to_live); + + // Set the loopback flag for UDP socket. If this flag is true, the host + // will receive packets sent to the joined group from itself. + // The default value of this option is true. + // Should be called before Bind(). + // + // Note: the behavior of |SetMulticastLoopbackMode| is slightly + // different between Windows and Unix-like systems. The inconsistency only + // happens when there are more than one applications on the same host + // joined to the same multicast group while having different settings on + // multicast loopback mode. On Windows, the applications with loopback off + // will not RECEIVE the loopback packets; while on Unix-like systems, the + // applications with loopback off will not SEND the loopback packets to + // other applications on the same host. See MSDN: http://goo.gl/6vqbj + int SetMulticastLoopbackMode(bool loopback); + private: enum SocketOptions { - SOCKET_OPTION_REUSE_ADDRESS = 1 << 0, - SOCKET_OPTION_BROADCAST = 1 << 1 + SOCKET_OPTION_REUSE_ADDRESS = 1 << 0, + SOCKET_OPTION_BROADCAST = 1 << 1, + SOCKET_OPTION_MULTICAST_LOOP = 1 << 2 }; class Core; @@ -160,11 +197,16 @@ class NET_EXPORT UDPSocketWin : NON_EXPORTED_BASE(public base::NonThreadSafe) { bool ReceiveAddressToIPEndpoint(IPEndPoint* address) const; SOCKET socket_; + int addr_family_; // Bitwise-or'd combination of SocketOptions. Specifies the set of // options that should be applied to |socket_| before Bind(). int socket_options_; + // Multicast socket options cached for SetSocketOption. + // Cannot be used after Bind(). + int multicast_time_to_live_; + // How to do source port binding, used only when UDPSocket is part of // UDPClientSocket, since UDPServerSocket provides Bind. DatagramSocket::BindType bind_type_; |