is IPV6_AVAILABLE not set, allways return SOCK_BUSY: if (sock_io_mode & (1 << sn)) { return SOCK_BUSY; } if (recvsize != 0) { break; } Please swap the two if blocks.