sockaddr と sockaddr_storage の違いは何ですか? コードを見るとまったく同じに見えるので、わかりません:
struct sockaddr {
    uint8_t sa_len;
    sa_family_t sa_family;
    char sa_data[14];
}
struct sockaddr_storage {
    uint8_t ss_len;
    sa_family_t ss_family;
    char ss_padding[SIZE];
}