return result;
}
-#ifndef DOC_HIDDEN
-int snd_is_local(struct hostent *hent)
-{
- int s;
- int err;
- struct ifconf conf;
- size_t numreqs = 10;
- size_t i;
- struct in_addr *haddr = (struct in_addr*) hent->h_addr_list[0];
-
- s = socket(PF_INET, SOCK_STREAM, 0);
- if (s < 0) {
- SYSERR("socket failed");
- return -errno;
- }
-
- conf.ifc_len = numreqs * sizeof(struct ifreq);
- conf.ifc_buf = malloc((unsigned int) conf.ifc_len);
- if (! conf.ifc_buf)
- return -ENOMEM;
- while (1) {
- err = ioctl(s, SIOCGIFCONF, &conf);
- if (err < 0) {
- SYSERR("SIOCGIFCONF failed");
- return -errno;
- }
- if ((size_t)conf.ifc_len < numreqs * sizeof(struct ifreq))
- break;
- numreqs *= 2;
- conf.ifc_len = numreqs * sizeof(struct ifreq);
- conf.ifc_buf = realloc(conf.ifc_buf, (unsigned int) conf.ifc_len);
- if (! conf.ifc_buf)
- return -ENOMEM;
- }
- numreqs = conf.ifc_len / sizeof(struct ifreq);
- for (i = 0; i < numreqs; ++i) {
- struct ifreq *req = &conf.ifc_req[i];
- struct sockaddr_in *s_in = (struct sockaddr_in *)&req->ifr_addr;
- s_in->sin_family = AF_INET;
- err = ioctl(s, SIOCGIFADDR, req);
- if (err < 0)
- continue;
- if (haddr->s_addr == s_in->sin_addr.s_addr)
- break;
- }
- close(s);
- free(conf.ifc_buf);
- return i < numreqs;
-}
-#endif
-
/*! \page pcm_plugins
\section pcm_plugins_shm Plugin: shm
/**
- * \file pcm/socket.c
+ * \file socket.c
* \brief Socket helper routines
* \author Abramo Bagnara <abramo@alsa-project.org>
* \date 2003
#include <sys/socket.h>
#include <sys/uio.h>
#include <sys/un.h>
+#include <netinet/in.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#include <netdb.h>
#include "local.h"
#ifndef DOC_HIDDEN
*fd = *fds;
return ret;
}
+
+int snd_is_local(struct hostent *hent)
+{
+ int s;
+ int err;
+ struct ifconf conf;
+ size_t numreqs = 10;
+ size_t i;
+ struct in_addr *haddr = (struct in_addr*) hent->h_addr_list[0];
+
+ s = socket(PF_INET, SOCK_STREAM, 0);
+ if (s < 0) {
+ SYSERR("socket failed");
+ return -errno;
+ }
+
+ conf.ifc_len = numreqs * sizeof(struct ifreq);
+ conf.ifc_buf = malloc((unsigned int) conf.ifc_len);
+ if (! conf.ifc_buf)
+ return -ENOMEM;
+ while (1) {
+ err = ioctl(s, SIOCGIFCONF, &conf);
+ if (err < 0) {
+ SYSERR("SIOCGIFCONF failed");
+ return -errno;
+ }
+ if ((size_t)conf.ifc_len < numreqs * sizeof(struct ifreq))
+ break;
+ numreqs *= 2;
+ conf.ifc_len = numreqs * sizeof(struct ifreq);
+ conf.ifc_buf = realloc(conf.ifc_buf, (unsigned int) conf.ifc_len);
+ if (! conf.ifc_buf)
+ return -ENOMEM;
+ }
+ numreqs = conf.ifc_len / sizeof(struct ifreq);
+ for (i = 0; i < numreqs; ++i) {
+ struct ifreq *req = &conf.ifc_req[i];
+ struct sockaddr_in *s_in = (struct sockaddr_in *)&req->ifr_addr;
+ s_in->sin_family = AF_INET;
+ err = ioctl(s, SIOCGIFADDR, req);
+ if (err < 0)
+ continue;
+ if (haddr->s_addr == s_in->sin_addr.s_addr)
+ break;
+ }
+ close(s);
+ free(conf.ifc_buf);
+ return i < numreqs;
+}
#endif