#ifdef IPV6_V6ONLY
/*
- * Accepts only IPv6 connections on IPv6 sockets
- * (and open an IPv4 socket later as well if needed).
- * Only Linux and FreeBSD can map IPv4 connections on IPv6 sockets,
- * so this allows for more uniform handling across platforms. Besides,
- * it makes sure that IPv4 addresses will be printed as w.x.y.z rather
- * than ::ffff:w.x.y.z
+ * Accepts only IPv6 connections on IPv6 sockets.
+ * If possible, we should open two sockets, but it is not always possible.
*/
if (family == AF_INET6)
setsockopt (fd, IPPROTO_IPV6, IPV6_V6ONLY, &(int){ 1 }, sizeof (int));
case SOCK_STREAM:
case SOCK_RDM:
case SOCK_SEQPACKET:
+#ifdef SOCK_DCCP
+ case SOCK_DCCP:
+#endif
if (listen (fd, INT_MAX))
{
msg_Err (p_this, "socket listen error (%s)",
}
-int net_ListenSingle (vlc_object_t *obj, const char *host, int port,
- int family, int socktype, int protocol)
-{
- int *fdv = net_Listen (obj, host, port, family, socktype, protocol);
- if (fdv == NULL)
- return -1;
-
- for (unsigned i = 1; fdv[i] != -1; i++)
- {
- msg_Warn (obj, "Multiple sockets opened. Dropping extra ones!");
- net_Close (fdv[i]);
- }
-
- int fd = fdv[0];
- assert (fd != -1);
-
- free (fdv);
- return fd;
-}
-
-
-
static ssize_t
net_ReadInner (vlc_object_t *restrict p_this, unsigned fdc, const int *fdv,
const v_socket_t *const *restrict vsv,
while (i_buflen > 0)
{
- if (p_this->b_die)
+ if( ( p_this->b_die ) || ( p_this->p_libvlc->b_die ) )
{
#if defined(WIN32) || defined(UNDER_CE)
- WSASetLastError(WSAEINTR);
+ WSASetLastError (WSAEINTR);
#else
errno = EINTR;
#endif
fdc = 1;
fdv += i;
vsv += i;
+
break;
}
if (n == -1)
{
#if defined(WIN32) || defined(UNDER_CE)
- switch (WSAGetLastError())
+ switch (WSAGetLastError ())
{
case WSAEWOULDBLOCK:
/* only happens with vs != NULL (SSL) - not really an error */
memset(&addr, 0, sizeof(addr));
addr.sin6_family = AF_INET6;
addr.sin6_addr = *((struct in6_addr*)src);
- if( 0 == WSAAddressToStringA((LPSOCKADDR)&addr,
- sizeof(struct sockaddr_in6),
+ if( 0 == WSAAddressToStringA((LPSOCKADDR)&addr,
+ sizeof(struct sockaddr_in6),
NULL, dst, &cnt) )
{
dst[cnt] = '\0';