- namelen = address->addresstype == LHNETADDRESSTYPE_INET6 ? sizeof(lhnetsocket->address.addressdata.inet6) : sizeof(lhnetsocket->address.addressdata.inet4);
- if (bind(lhnetsocket->inetsocket, (struct sockaddr *)&lhnetsocket->address.addressdata, namelen) != -1)
+ int bindresult;
+ if (address->addresstype == LHNETADDRESSTYPE_INET6)
+ {
+ namelen = sizeof(localaddress->addr.in6);
+ bindresult = bind(lhnetsocket->inetsocket, &localaddress->addr.sock, namelen);
+ if (bindresult != -1)
+ getsockname(lhnetsocket->inetsocket, &localaddress->addr.sock, &namelen);
+ }
+ else
+ {
+ namelen = sizeof(localaddress->addr.in);
+ bindresult = bind(lhnetsocket->inetsocket, &localaddress->addr.sock, namelen);
+ if (bindresult != -1)
+ getsockname(lhnetsocket->inetsocket, &localaddress->addr.sock, &namelen);
+ }
+ if (bindresult != -1)