X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_network.h;h=ce413f86ab614a984a92fbdfe1a6fc6e4b82f0db;hb=7b4e7dc93dd9bf941bcfe2e2911bbf1de86d7bc6;hp=5e09fb298416292ce71796ff73468db956c1e8db;hpb=90d8682114f44b07051a5e1f24eab0039690cd33;p=vlc diff --git a/include/vlc_network.h b/include/vlc_network.h index 5e09fb2984..ce413f86ab 100644 --- a/include/vlc_network.h +++ b/include/vlc_network.h @@ -41,15 +41,38 @@ # define ENETUNREACH WSAENETUNREACH # define net_errno (WSAGetLastError()) extern const char *net_strerror( int val ); + +struct iovec +{ + void *iov_base; + size_t iov_len; +}; + +struct msghdr +{ + void *msg_name; + size_t msg_namelen; + struct iovec *msg_iov; + size_t msg_iovlen; + void *msg_control; + size_t msg_controllen; + int msg_flags; +}; + +VLC_EXPORT( ssize_t, vlc_sendmsg, ( int, struct msghdr *, int ) ); +VLC_EXPORT( ssize_t, vlc_recvmsg, ( int, struct msghdr *, int ) ); +#define sendmsg vlc_sendmsg +#define recvmsg vlc_recvmsg + # ifndef IPV6_V6ONLY # define IPV6_V6ONLY 27 # endif #else # include -# if HAVE_NETINET_IN_H +# ifdef HAVE_NETINET_IN_H # include # endif -# if HAVE_ARPA_INET_H +# ifdef HAVE_ARPA_INET_H # include # elif defined( SYS_BEOS ) # include @@ -117,7 +140,7 @@ struct virtual_socket_t }; #define net_Read(a,b,c,d,e,f) __net_Read(VLC_OBJECT(a),b,c,d,e,f) -VLC_EXPORT( ssize_t, __net_Read, ( vlc_object_t *p_this, int fd, const v_socket_t *, uint8_t *p_data, size_t i_data, vlc_bool_t b_retry ) ); +VLC_EXPORT( ssize_t, __net_Read, ( vlc_object_t *p_this, int fd, const v_socket_t *, uint8_t *p_data, size_t i_data, bool b_retry ) ); #define net_Write(a,b,c,d,e) __net_Write(VLC_OBJECT(a),b,c,d,e) VLC_EXPORT( ssize_t, __net_Write, ( vlc_object_t *p_this, int fd, const v_socket_t *, const uint8_t *p_data, size_t i_data ) ); @@ -256,7 +279,7 @@ VLC_EXPORT( int, vlc_getaddrinfo, ( vlc_object_t *, const char *, int, const str VLC_EXPORT( void, vlc_freeaddrinfo, ( struct addrinfo * ) ); -static inline vlc_bool_t +static inline bool net_SockAddrIsMulticast (const struct sockaddr *addr, socklen_t len) { switch (addr->sa_family) @@ -266,7 +289,7 @@ net_SockAddrIsMulticast (const struct sockaddr *addr, socklen_t len) { const struct sockaddr_in *v4 = (const struct sockaddr_in *)addr; if ((size_t)len < sizeof (*v4)) - return VLC_FALSE; + return false; return IN_MULTICAST (ntohl (v4->sin_addr.s_addr)) != 0; } #endif @@ -276,44 +299,16 @@ net_SockAddrIsMulticast (const struct sockaddr *addr, socklen_t len) { const struct sockaddr_in6 *v6 = (const struct sockaddr_in6 *)addr; if ((size_t)len < sizeof (*v6)) - return VLC_FALSE; + return false; return IN6_IS_ADDR_MULTICAST (&v6->sin6_addr) != 0; } #endif } - return VLC_FALSE; + return false; } - -/** - * net_AddressIsMulticast - * @return VLC_FALSE iff the psz_addr does not specify a multicast address, - * or 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; - - memset (&hints, 0, sizeof (hints)); - hints.ai_socktype = SOCK_DGRAM; /* UDP */ - hints.ai_flags = AI_NUMERICHOST; - - int i = vlc_getaddrinfo (p_object, psz_addr, 0, - &hints, &res); - if (i) - { - msg_Err (p_object, "invalid address \"%s\" for net_AddressIsMulticast (%s)", - psz_addr, vlc_gai_strerror (i)); - return VLC_FALSE; - } - - vlc_bool_t b = net_SockAddrIsMulticast (res->ai_addr, res->ai_addrlen); - vlc_freeaddrinfo (res); - return b; -} - static inline int net_GetSockAddress( int fd, char *address, int *port ) { struct sockaddr_storage addr;