cheers david, that link made me think "it has to be a bug in my code" and lo, it turned out to be a bug in my code.
some gory details that may help someone else:
i had a pointer to a sockaddr_in structure in an addrinfo list returned by getaddrinfo. I subsequently freed the addrinfo structure (using freeaddrinfo). I continued to use the pointer to the sockaddr_in despite the fact that i'd freed the addrinfo structure. This is of course undefined behaviour.
xp __seemed__ to be ok about it the several dozen times i'd tested, but w7 100% of the time wasn't. I dunno and don't care how vista feels about it