- if (setsockopt(l, SOL_SOCKET, SO_REUSEADDR, (char*)
- &one, sizeof(one)) < 0)
- abort();
+ freeaddrinfo(af);
+ return 1;
+ }
+ if (ipv6_only >= 0 && ai->ai_family == AF_INET6 &&
+ setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &ipv6_only, sizeof(ipv6_only)))
+ {
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "setsockopt IPV6_V6ONLY %s:%s %d",
+ server->host, server->port, ipv6_only);
+ freeaddrinfo(af);
+ CLOSESOCKET(s);
+ return 1;
+ }
+ if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)))
+ {
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "setsockopt SO_REUSEADDR %s:%s",
+ server->host, server->port);
+ freeaddrinfo(af);
+ CLOSESOCKET(s);
+ return 1;
+ }
+ if (bind(s, ai->ai_addr, ai->ai_addrlen) < 0)
+ {
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "bind %s:%s",
+ server->host, server->port);
+ freeaddrinfo(af);
+ CLOSESOCKET(s);
+ return 1;
+ }
+ freeaddrinfo(af);
+ if (listen(s, SOMAXCONN) < 0)
+ {
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "listen %s:%s",
+ server->host, server->port);
+ CLOSESOCKET(s);
+ return 1;
+ }