In order to call a function from within an ISR the subsystem containing the function has to carefully protect all of it data areas (and thus a lot of its code paths) from the effects of being re-entered from an ISR.
This typically means disabling interrupts for large tracts of code - which will adversely affect interrupt latency.
Provided your ISR can't interrupt any of the ethernet ISRs, you might manage by disabling your (or all) interrupts across ALL socket functions in all threads - and include any system task used for network processing.
Much better is to put the data into a locally defined private circular buffer and get a task to do the actual send.
In general the only functions you can call from an interrupt are those explicitly marked as being callable from an interrupt (or that clearly have to be callable from an interrupt). These will all be very low-level functions.