the function conn_connect (client.c@634) calls
return uv_tcp_connect(&c->t.connect_req,
                        &c->handle.tcp,
                        &c->t.addr,
                        conn_connect_done);

uv_tcp_connect will reset the connect_req struct (tcp.c@725) but this memory address is share with  addr,addr4,addr6, doing so will leads in rewritting the tcp address with junk data, that's why I moved the three req structs outside the union to prevent this behavior.