いや、誰も悪くないんだって。
OSもAPIも間のルータかスイッチも仕様どおりに動いた。
プログラムも仕様どおりに動いた。
645も神様か親DNA由来の仕様どおりに動いた。

ところで645の人は647のソースをどっからかコピペしてきて
改変したんだろうけど、元のソースでちゃんと
while (totalBytesRcvd < sizeof(msgStruct))
{
 ...
totalBytesRcvd += bytesRcvd
}
っていう構造になってるのに、それを改悪して「動作が変」とか言ってるんだよね。
元のソースがどういう動作をするようになっているのか、recvの戻り値の意味も
考えてよく考察するようにした方が良いと思う。