et j'ai pas testé le code, mais ici
int n = 0;
if( n = recv(sock, buffer, sizeof buffer-1, NULL) < 0 )
{
perror("recv()");
exit(errno);
}
ton if me semble faux.
essaye plutot :
if((n = recv(sock, buffer, sizeof(buffer - 1), NULL)) < 0 )
ensuite le dernier parametre de recv c'est un int donc lui passe pas NULL mais plutot 0.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740121%28v=vs.85%29.aspx