+/*****************************************************************************
+ * net_AddressIsMulticast: This function returns VLC_FALSE if the psz_addr does
+ * not specify a multicast address or if the address is not a valid address.
+ *****************************************************************************/
+static inline vlc_bool_t net_AddressIsMulticast( vlc_object_t *p_object, const char *psz_addr )
+{
+ struct addrinfo hints, *res;
+ vlc_bool_t b_multicast = VLC_FALSE;
+ int i;
+
+ memset( &hints, 0, sizeof( hints ) );
+ hints.ai_socktype = SOCK_DGRAM; /* UDP */
+ hints.ai_flags = AI_NUMERICHOST;
+
+ i = vlc_getaddrinfo( p_object, psz_addr, 0,
+ &hints, &res );
+ if( i )
+ {
+ msg_Err( p_object, "Invalid node for net_AddressIsMulticast: %s : %s",
+ psz_addr, vlc_gai_strerror( i ) );
+ return VLC_FALSE;
+ }
+
+ if( res->ai_family == AF_INET )
+ {
+#if !defined( SYS_BEOS )
+ struct sockaddr_in *v4 = (struct sockaddr_in *) res->ai_addr;
+ b_multicast = ( ntohl( v4->sin_addr.s_addr ) >= 0xe0000000 )
+ && ( ntohl( v4->sin_addr.s_addr ) <= 0xefffffff );
+#endif
+ }
+#if defined( WIN32 ) || defined( HAVE_GETADDRINFO )
+ else if( res->ai_family == AF_INET6 )
+ {
+ struct sockaddr_in6 *v6 = (struct sockaddr_in6 *)res->ai_addr;
+ b_multicast = IN6_IS_ADDR_MULTICAST( &v6->sin6_addr );
+ }
+#endif
+
+ vlc_freeaddrinfo( res );
+ return b_multicast;
+}
+
+static inline int net_GetSockAddress( int fd, char *address, int *port )
+{
+ struct sockaddr_storage addr;
+ socklen_t addrlen = sizeof( addr );
+
+ return getpeername( fd, (struct sockaddr *)&addr, &addrlen )
+ || vlc_getnameinfo( (struct sockaddr *)&addr, addrlen, address,
+ NI_MAXNUMERICHOST, port, NI_NUMERICHOST )
+ ? VLC_EGENERIC : 0;
+}
+
+static inline int net_GetPeerAddress( int fd, char *address, int *port )
+{
+ struct sockaddr_storage addr;
+ socklen_t addrlen = sizeof( addr );
+
+ return getpeername( fd, (struct sockaddr *)&addr, &addrlen )
+ || vlc_getnameinfo( (struct sockaddr *)&addr, addrlen, address,
+ NI_MAXNUMERICHOST, port, NI_NUMERICHOST )
+ ? VLC_EGENERIC : 0;
+}
+
+# ifdef __cplusplus
+}
+# endif
+