mirror of
https://github.com/yarrick/iodine.git
synced 2025-10-17 16:51:54 +00:00
Only accept IPv6 in server IPv6 socket
Set IPV6_V6ONLY flag on server socket. Not all operating systems support mixing v4/v6 in one socket, so separate them all the time.
This commit is contained in:
10
src/common.c
10
src/common.c
@@ -172,6 +172,12 @@ get_addr(char *host, int port, int addr_family, int flags, struct sockaddr_stora
|
||||
|
||||
int
|
||||
open_dns(struct sockaddr_storage *sockaddr, size_t sockaddr_len)
|
||||
{
|
||||
return open_dns_opt(sockaddr, sockaddr_len, -1);
|
||||
}
|
||||
|
||||
int
|
||||
open_dns_opt(struct sockaddr_storage *sockaddr, size_t sockaddr_len, int v6only)
|
||||
{
|
||||
int flag;
|
||||
int fd;
|
||||
@@ -190,6 +196,10 @@ open_dns(struct sockaddr_storage *sockaddr, size_t sockaddr_len)
|
||||
fd_set_close_on_exec(fd);
|
||||
#endif
|
||||
|
||||
if (sockaddr->ss_family == AF_INET6 && v6only >= 0) {
|
||||
setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (const void*) &v6only, sizeof(v6only));
|
||||
}
|
||||
|
||||
#ifdef IP_OPT_DONT_FRAG
|
||||
/* Set dont-fragment ip header flag */
|
||||
flag = DONT_FRAG_VALUE;
|
||||
|
Reference in New Issue
Block a user