А вот напомни мне, автор. А всегда ли сенд может отправить ВСЕ данные, которые ты ей скормил? то есть может ли он отправить только кусок данных и размер этого куска, собственно, тебе вернуть? Вот как ответишь на этот вопрос, так и поймешь сразу свою ситуацию.
Доступ к сокету разрулит. В случае с UDP, как уже говорил я и сказали выше, ничего не нашинкует (если в буфер влезут данные). В случае с TCP может нашинковать, а может и нет.
Presumably so simple UNIX filters didn’t have to check the return and loop (they’d just die with EPIPE anyway), write() tries hard to write all the data before returning.
При создании сокета линукс создает для него кэш. Обращения к кэшу синхронизированы. В остальном я не понимаю ваш вопрос. Вы хотите сбрасывать кэш при каждом send что ли?
Кусок из linux/include/sock.h
/* This is the per-socket lock. The spinlock provides a synchronization
* between user contexts and software interrupt processing, whereas the
* mini-semaphore synchronizes multiple users amongst themselves.
*/
Получается за ядро можно не волноваться, но это проблему вашей внутренней синхронизации не решает. Вы ведь можете получать данные в одном порядке а дергать ядро в другом. Впрочем, я не знаю вашей задачи.