What about shutdown()? I believe when you call shutdown() the server receives the 'socket closed' byte once all data after the shutdown() has been received, even though on the client side the socket isn't really officially closed. Once the server calls closesocket(), the client receives the 'socket closed' byte as well, and then you know that it's safe to close the socket. For example:
Code:
send(sock, "Data coming.", strlen("Data coming."), 0);
send(sock, "This is the data.", strlen("This is the data."), 0);
shutdown(sock, SD_SEND);
char temp;
recv(sock, &temp, 1);
closesocket(sock);
Of course, you should probably do the whole error checking thing and all, but if the server isn't supposed to send any data back to the client, that should work.