From 79c3d0a1efd42414547430dc6801373a3a927e6f Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Wed, 30 Nov 2005 11:31:18 +0000 Subject: [PATCH] Move snd_is_local() to socket.c Move snd_is_local() to socket.c since it's used in control_shm, too. --- src/pcm/pcm_shm.c | 51 ------------------------------------------- src/socket.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 52 deletions(-) diff --git a/src/pcm/pcm_shm.c b/src/pcm/pcm_shm.c index f2968a5a..ad57f0f0 100644 --- a/src/pcm/pcm_shm.c +++ b/src/pcm/pcm_shm.c @@ -778,57 +778,6 @@ int snd_pcm_shm_open(snd_pcm_t **pcmp, const char *name, 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 diff --git a/src/socket.c b/src/socket.c index edf27399..97c919f7 100644 --- a/src/socket.c +++ b/src/socket.c @@ -1,5 +1,5 @@ /** - * \file pcm/socket.c + * \file socket.c * \brief Socket helper routines * \author Abramo Bagnara * \date 2003 @@ -33,6 +33,10 @@ #include #include #include +#include +#include +#include +#include #include "local.h" #ifndef DOC_HIDDEN @@ -102,4 +106,53 @@ int snd_receive_fd(int sock, void *data, size_t len, int *fd) *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 -- 2.47.1