Hi Jeff,
I have a competing version of a similar patch that I was going to send in. Ordinarily I'd defer to the first poster rule, but in this case I'd rather mine were used. The difference is, you use the ternary comparison operator:
+ (((const struct WS_sockaddr_in *)a)->sin_family == AF_INET) ? + (void *)&((struct WS_sockaddr_in *)a)->sin_addr : + ((struct WS_sockaddr_in6 *)a)->sin6_addr.WS_s6_addr,
This makes the expression rather long, and also makes it hard to extend beyond two address families. ws2_32 also supports IPX, and with any luck it'll soon support IrDA.
I'll send mine in shortly, and you can complain if you like :) --Juan