84
81
const struct optstruct *opt;
85
82
static struct sockaddr_in testsock;
83
char *ipaddr, port[10];
84
struct addrinfo hints, *info, *p;
88
88
if((opt = optget(clamdopts, "LocalSocket"))->enabled) {
89
memset((void *)&nixsock, 0, sizeof(nixsock));
90
nixsock.sun_family = AF_UNIX;
91
strncpy(nixsock.sun_path, opt->strarg, sizeof(nixsock.sun_path));
92
nixsock.sun_path[sizeof(nixsock.sun_path)-1]='\0';
93
mainsa = (struct sockaddr *)&nixsock;
94
mainsasz = sizeof(nixsock);
89
memset((void *)&nixsock, 0, sizeof(nixsock));
90
nixsock.sun_family = AF_UNIX;
91
strncpy(nixsock.sun_path, opt->strarg, sizeof(nixsock.sun_path));
92
nixsock.sun_path[sizeof(nixsock.sun_path)-1]='\0';
98
96
if(!(opt = optget(clamdopts, "TCPSocket"))->enabled)
101
mainsa = (struct sockaddr *)&tcpsock;
102
mainsasz = sizeof(tcpsock);
104
if (cfg_tcpsock(clamdopts, &tcpsock, INADDR_LOOPBACK) == -1) {
105
logg("!Can't lookup clamd hostname: %s.\n", strerror(errno));
109
memcpy((void *)&testsock, (void *)&tcpsock, sizeof(testsock));
110
testsock.sin_port = htons(INADDR_ANY);
111
if((s = socket(testsock.sin_family, SOCK_STREAM, 0)) < 0) {
112
logg("isremote: socket() returning: %s.\n", strerror(errno));
116
ret = (bind(s, (struct sockaddr *)&testsock, (socklen_t)sizeof(testsock)) != 0);
99
snprintf(port, sizeof(port), "%lld", optget(clamdopts, "TCPSocket")->numarg);
101
opt = optget(clamdopts, "TCPAddr");
105
ipaddr = (!strcmp(opt->strarg, "any") ? NULL : opt->strarg);
107
memset(&hints, 0x00, sizeof(struct addrinfo));
108
hints.ai_family = AF_UNSPEC;
109
hints.ai_socktype = SOCK_STREAM;
110
hints.ai_flags = AI_PASSIVE;
112
if ((res = getaddrinfo(ipaddr, port, &hints, &info))) {
113
logg("!Can't lookup clamd hostname: %s\n", gai_strerror(res));
118
for (p = info; p != NULL; p = p->ai_next) {
119
if((s = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) < 0) {
120
logg("isremote: socket() returning: %s.\n", strerror(errno));
124
switch (p->ai_family) {
126
((struct sockaddr_in *)(p->ai_addr))->sin_port = htons(INADDR_ANY);
129
((struct sockaddr_in6 *)(p->ai_addr))->sin6_port = htons(INADDR_ANY);
135
ret = bind(s, p->ai_addr, p->ai_addrlen);
137
if (errno == EADDRINUSE) {
139
* If we can't bind, then either we're attempting to listen on an IP that isn't
140
* ours or that clamd is already listening on.