LINUX.ORG.RU

Ответ на: комментарий от NegatiV

ядро все разрулит

Что оно там разрулит? Откуда ядру знать, что делается в потоке userspace-а? Переключит контекст — и нашинкует данные, как попало.

one_more_hokum ★★★ ()

А вот напомни мне, автор. А всегда ли сенд может отправить ВСЕ данные, которые ты ей скормил? то есть может ли он отправить только кусок данных и размер этого куска, собственно, тебе вернуть? Вот как ответишь на этот вопрос, так и поймешь сразу свою ситуацию.

anonymous ()
Ответ на: комментарий от normann

этого не было в изначальном топике =]

anonymous ()
Ответ на: комментарий от one_more_hokum

Доступ к сокету разрулит. В случае с UDP, как уже говорил я и сказали выше, ничего не нашинкует (если в буфер влезут данные). В случае с TCP может нашинковать, а может и нет.

NegatiV ()
Последнее исправление: NegatiV (всего исправлений: 1)
Ответ на: комментарий от anonymous

На kernelplanet об этом недавно статья прошла: http://rusty.ozlabs.org/?p=437

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.

Krieger_Od ★★ ()
Ответ на: комментарий от normann

В общем-то поток (SOCK_STREAM) лучше не писать из разных потоков. А вообще если такой вопрос возник, то, имхо, проблема в архитектуре.

anonymous ()
Ответ на: комментарий от one_more_hokum

При создании сокета линукс создает для него кэш. Обращения к кэшу синхронизированы. В остальном я не понимаю ваш вопрос. Вы хотите сбрасывать кэш при каждом 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.
 */
Получается за ядро можно не волноваться, но это проблему вашей внутренней синхронизации не решает. Вы ведь можете получать данные в одном порядке а дергать ядро в другом. Впрочем, я не знаю вашей задачи.

A-234 ★★★★★ ()
Ответ на: комментарий от A-234

вашей задачи

Конкретная задача еще не поставлена, просто пока интересуюсь механизмом работы сокетов для того чтобы знать как проектировать алгоритм.

Самое главное я узнал что сам по себе параллельный вызов двух send() не вызовет ошибку времени выполнения.

normann ★★ ()
Последнее исправление: normann (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.