На странице подключения:
Сокеты без установления соединения могут разрушить ассоциацию, подключившись к адресу с элементом sa_family sockaddr, установленным в AF_UNSPEC (поддерживается в Linux начиная с ядра 2.2).
Справочная страница немного устарела, она будет работать на любом сокете, который вообще может быть отключен, например, на сокетах TCP.
На практике нет ошибки при попытке растворить ассоциацию на потоковом сокете, который еще не подключен. Вот почему вы не получаете сообщение об ошибке.
Если вам нужно получить ошибку, инициализируйте семейство адресов недействительным семейством:
static struct sockaddr_in g_server_addr = { -1 };
Это приведет к ошибке -1 EAFNOSUPPORT (Address family not supported by protocol)
См. Также net/ipv4/af_inet.c
недавнего ядра Linux:
int __inet_stream_connect(struct socket *sock, struct sockaddr *uaddr,
int addr_len, int flags) {
...
if (uaddr->sa_family == AF_UNSPEC) {
err = sk->sk_prot->disconnect(sk, flags);
sock->state = err ? SS_DISCONNECTING : SS_UNCONNECTED;
goto out;
}
...
out:
return err;