You are replacing the first few bytes of the send function without re-implementing them elsewhere, which ends up skipping part of the function prologue. You should be logging the operations that are there and adding them to the end of your code cave.

Better yet, you should grab Microsoft's Detours library and use that, as it will do everything for you.