# ifndef USE_WINSOCK
log_err("setsockopt(..., SO_RCVBUFFORCE, "
"...) failed: %s", strerror(errno));
- close(s);
# else
log_err("setsockopt(..., SO_RCVBUFFORCE, "
"...) failed: %s",
wsa_strerror(WSAGetLastError()));
- closesocket(s);
# endif
+ sock_close(s);
*noproto = 0;
*inuse = 0;
return -1;
# ifndef USE_WINSOCK
log_err("setsockopt(..., SO_RCVBUF, "
"...) failed: %s", strerror(errno));
- close(s);
# else
log_err("setsockopt(..., SO_RCVBUF, "
"...) failed: %s",
wsa_strerror(WSAGetLastError()));
- closesocket(s);
# endif
+ sock_close(s);
*noproto = 0;
*inuse = 0;
return -1;
# ifndef USE_WINSOCK
log_err("setsockopt(..., SO_SNDBUFFORCE, "
"...) failed: %s", strerror(errno));
- close(s);
# else
log_err("setsockopt(..., SO_SNDBUFFORCE, "
"...) failed: %s",
wsa_strerror(WSAGetLastError()));
- closesocket(s);
# endif
+ sock_close(s);
*noproto = 0;
*inuse = 0;
return -1;
# ifndef USE_WINSOCK
log_err("setsockopt(..., SO_SNDBUF, "
"...) failed: %s", strerror(errno));
- close(s);
# else
log_err("setsockopt(..., SO_SNDBUF, "
"...) failed: %s",
wsa_strerror(WSAGetLastError()));
- closesocket(s);
# endif
+ sock_close(s);
*noproto = 0;
*inuse = 0;
return -1;
#ifndef USE_WINSOCK
log_err("setsockopt(..., IPV6_V6ONLY"
", ...) failed: %s", strerror(errno));
- close(s);
#else
log_err("setsockopt(..., IPV6_V6ONLY"
", ...) failed: %s",
wsa_strerror(WSAGetLastError()));
- closesocket(s);
#endif
+ sock_close(s);
*noproto = 0;
*inuse = 0;
return -1;
# ifndef USE_WINSOCK
log_err("setsockopt(..., IPV6_USE_MIN_MTU, "
"...) failed: %s", strerror(errno));
- close(s);
# else
log_err("setsockopt(..., IPV6_USE_MIN_MTU, "
"...) failed: %s",
wsa_strerror(WSAGetLastError()));
- closesocket(s);
# endif
+ sock_close(s);
*noproto = 0;
*inuse = 0;
return -1;
# ifndef USE_WINSOCK
log_err("setsockopt(..., IPV6_MTU, ...) failed: %s",
strerror(errno));
- close(s);
# else
log_err("setsockopt(..., IPV6_MTU, ...) failed: %s",
wsa_strerror(WSAGetLastError()));
- closesocket(s);
# endif
+ sock_close(s);
*noproto = 0;
*inuse = 0;
return -1;
if (errno != EINVAL) {
log_err("setsockopt(..., IP_MTU_DISCOVER, IP_PMTUDISC_OMIT...) failed: %s",
strerror(errno));
-
-# ifndef USE_WINSOCK
- close(s);
-# else
- closesocket(s);
-# endif
+ sock_close(s);
*noproto = 0;
*inuse = 0;
return -1;
&action, (socklen_t)sizeof(action)) < 0) {
log_err("setsockopt(..., IP_MTU_DISCOVER, IP_PMTUDISC_DONT...) failed: %s",
strerror(errno));
-# ifndef USE_WINSOCK
- close(s);
-# else
- closesocket(s);
-# endif
+ sock_close(s);
*noproto = 0;
*inuse = 0;
return -1;
&off, (socklen_t)sizeof(off)) < 0) {
log_err("setsockopt(..., IP_DONTFRAG, ...) failed: %s",
strerror(errno));
-# ifndef USE_WINSOCK
- close(s);
-# else
- closesocket(s);
-# endif
+ sock_close(s);
*noproto = 0;
*inuse = 0;
return -1;
(struct sockaddr_storage*)addr, addrlen);
}
#endif /* EADDRINUSE */
- close(s);
#else /* USE_WINSOCK */
if(WSAGetLastError() != WSAEADDRINUSE &&
WSAGetLastError() != WSAEADDRNOTAVAIL &&
wsa_strerror(WSAGetLastError()),
(struct sockaddr_storage*)addr, addrlen);
}
- closesocket(s);
#endif /* USE_WINSOCK */
+ sock_close(s);
return -1;
}
if(!fd_set_nonblock(s)) {
*noproto = 0;
*inuse = 0;
-#ifndef USE_WINSOCK
- close(s);
-#else
- closesocket(s);
-#endif
+ sock_close(s);
return -1;
}
return s;
#ifndef USE_WINSOCK
log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s",
strerror(errno));
- close(s);
#else
log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s",
wsa_strerror(WSAGetLastError()));
- closesocket(s);
#endif
+ sock_close(s);
return -1;
}
#endif /* SO_REUSEADDR */
#ifndef USE_WINSOCK
log_err("setsockopt(..., IPV6_V6ONLY, ...) failed: %s",
strerror(errno));
- close(s);
#else
log_err("setsockopt(..., IPV6_V6ONLY, ...) failed: %s",
wsa_strerror(WSAGetLastError()));
- closesocket(s);
#endif
+ sock_close(s);
return -1;
}
}
(struct sockaddr_storage*)addr->ai_addr,
addr->ai_addrlen);
}
- close(s);
#else
log_err_addr("can't bind socket",
wsa_strerror(WSAGetLastError()),
(struct sockaddr_storage*)addr->ai_addr,
addr->ai_addrlen);
- closesocket(s);
#endif
+ sock_close(s);
return -1;
}
if(!fd_set_nonblock(s)) {
-#ifndef USE_WINSOCK
- close(s);
-#else
- closesocket(s);
-#endif
+ sock_close(s);
return -1;
}
if(listen(s, TCP_BACKLOG) == -1) {
#ifndef USE_WINSOCK
log_err("can't listen: %s", strerror(errno));
- close(s);
#else
log_err("can't listen: %s", wsa_strerror(WSAGetLastError()));
- closesocket(s);
#endif
+ sock_close(s);
return -1;
}
#ifdef USE_TCP_FASTOPEN
return NULL;
}
-# ifndef USE_WINSOCK
-char*
-sock_strerror(int errn)
-{
- return strerror(errn);
-}
-
-void
-sock_close(int socket)
-{
- close(socket);
-}
-
-# else
-char*
-sock_strerror(int ATTR_UNUSED(errn))
-{
- return wsa_strerror(WSAGetLastError());
-}
-
-void
-sock_close(int socket)
-{
- closesocket(socket);
-}
-
-# endif /* USE_WINSOCK */
-
int
create_local_accept_sock(const char *path, int* noproto, int use_systemd)
{
return s;
err:
-#ifndef USE_WINSOCK
- close(s);
-#else
- closesocket(s);
-#endif
+ sock_close(s);
return -1;
#ifdef HAVE_SYSTEMD
}
/* getting source addr packet info is highly non-portable */
if(!set_recvpktinfo(s, hints->ai_family)) {
-#ifndef USE_WINSOCK
- close(s);
-#else
- closesocket(s);
-#endif
+ sock_close(s);
return 0;
}
if(!port_insert(list, s,
is_dnscrypt?listen_type_udpancil_dnscrypt:listen_type_udpancil)) {
-#ifndef USE_WINSOCK
- close(s);
-#else
- closesocket(s);
-#endif
+ sock_close(s);
return 0;
}
} else if(do_udp) {
}
if(!port_insert(list, s,
is_dnscrypt?listen_type_udp_dnscrypt:listen_type_udp)) {
-#ifndef USE_WINSOCK
- close(s);
-#else
- closesocket(s);
-#endif
+ sock_close(s);
return 0;
}
}
verbose(VERB_ALGO, "setup TCP for SSL service");
if(!port_insert(list, s, is_ssl?listen_type_ssl:
(is_dnscrypt?listen_type_tcp_dnscrypt:listen_type_tcp))) {
-#ifndef USE_WINSOCK
- close(s);
-#else
- closesocket(s);
-#endif
+ sock_close(s);
return 0;
}
}
while(list) {
nx = list->next;
if(list->fd != -1) {
-#ifndef USE_WINSOCK
- close(list->fd);
-#else
- closesocket(list->fd);
-#endif
+ sock_close(list->fd);
}
free(list);
list = nx;
free(s);
s = sn;
}
-#ifndef USE_WINSOCK
- close(p->client_s);
- if(p->server_s != -1)
- close(p->server_s);
-#else
- closesocket(p->client_s);
+ sock_close(p->client_s);
if(p->server_s != -1)
- closesocket(p->server_s);
-#endif
+ sock_close(p->server_s);
free(p);
}
#ifndef USE_WINSOCK
if(errno != EINPROGRESS) {
log_err("tcp connect: %s", strerror(errno));
- close(p->server_s);
- close(p->client_s);
#else
if(WSAGetLastError() != WSAEWOULDBLOCK &&
WSAGetLastError() != WSAEINPROGRESS) {
log_err("tcp connect: %s",
wsa_strerror(WSAGetLastError()));
- closesocket(p->server_s);
- closesocket(p->client_s);
#endif
+ sock_close(p->server_s);
+ sock_close(p->client_s);
free(p);
return;
}
log_addr(1, "read tcp answer", &p->addr, p->addr_len);
if(!tcp_relay_read(p->server_s, &p->answerlist,
&p->answerlast, now, delay, pkt)) {
-#ifndef USE_WINSOCK
- close(p->server_s);
-#else
- closesocket(p->server_s);
-#endif
+ sock_close(p->server_s);
FD_CLR(FD_SET_T p->server_s, worig);
FD_CLR(FD_SET_T p->server_s, rorig);
p->server_s = -1;
"%u returned\n", i++, from, port, (int)p->numreuse+1,
(unsigned)p->numwait, (unsigned)p->numsent,
(unsigned)p->numreturn);
-#ifndef USE_WINSOCK
- close(p->s);
-#else
- closesocket(p->s);
-#endif
+ sock_close(p->s);
free(p);
p = np;
}
/* cleanup */
verbose(1, "cleanup");
-#ifndef USE_WINSOCK
- close(s);
- close(listen_s);
-#else
- closesocket(s);
- closesocket(listen_s);
-#endif
+ sock_close(s);
+ sock_close(listen_s);
sldns_buffer_free(pkt);
ring_delete(ring);
}