Socket programming in dual stack environments