diff --git a/lib/socket.c b/lib/socket.c index 4f0d17401..8c4b14326 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -800,15 +800,19 @@ fail: } int open_v46_socket(socket_t *r, int type) { - sockfamily_t *fam = &__socket_families[SF_IP6]; - - if (__socket(r, type, fam)) { - __C_DBG("open socket fail, fd=%d", r->fd); - return -1; + int ret = __socket(r, type, &__socket_families[SF_IP6]); + if (ret) { + if (errno == EAFNOSUPPORT) + ret = __socket(r, type, &__socket_families[SF_IP4]); + if (ret) { + __C_DBG("open socket fail"); + return -1; + } } + else + ipv6only(r->fd, 0); nonblock(r->fd); - ipv6only(r->fd, 0); return 0; }