Так может быть по определению. Т.е. функция send() может отправить не все данные, и это является нормальной ситуацией. В Windows это редкая ситуация, может быть если вызван, например WSPCancelBlockingCall(). В POSIX системах это достаточно частая ситуация, которая может возникнуть при недостаточном количестве буферов или при получении сигнала, например.
send() возвращает количество отправленных байт, проверяйте его и доотправляйте то, что не было отправлено.