send и многопоточность
От: Davidian Россия  
Дата: 20.01.05 02:48
Оценка:
Вопрос такой:
Есть несколько потоков посылающие данные одному сокету с помощью ф-ции send.
Может ли Windows прервать выполнение потока во время вызова send? То есть, если каждый поток посылает блок данных с помощью одного вызова send, есть ли гарантия, что этот блок данных передастся клиенту в том виде в котором он послан и не прервется send другим потоком (не произойдет смешивание данных от разных потоков)?
Re: send и многопоточность
От: butcher Россия http://bu7cher.blogspot.com
Дата: 20.01.05 05:27
Оценка:
Здравствуйте, Davidian, Вы писали:

D>Вопрос такой:

D> Есть несколько потоков посылающие данные одному сокету с помощью ф-ции send.
D> Может ли Windows прервать выполнение потока во время вызова send? То есть, если каждый поток посылает блок данных с помощью одного вызова send, есть ли гарантия, что этот блок данных передастся клиенту в том виде в котором он послан и не прервется send другим потоком (не произойдет смешивание данных от разных потоков)?

Смешиваение не произойдёт, но последовательность наршуится может, если вы не будете контролировать это.

Нет ничего невозможного..
Re: send и многопоточность
От: MaximE Великобритания  
Дата: 21.01.05 08:49
Оценка:
Davidian wrote:

> Вопрос такой:

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

Для UDP дейтаграмм этого произойти не может.

Для TCP потоков тоже — для каждого клиента одного серверного TCP сокета у тебя в сервере будет отдельное TCP соединение (сокет, полученный при помощи accept). Данные от отдельных клиентов не "перемешиваются".

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re[2]: send и многопоточность
От: Michael Chelnokov Украина  
Дата: 21.01.05 13:52
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Для TCP потоков тоже — для каждого клиента одного серверного TCP сокета у тебя в сервере будет отдельное TCP соединение (сокет, полученный при помощи accept). Данные от отдельных клиентов не "перемешиваются".


Вопрос, насколько я понял был в другом — можно ли отсылать данные из нескольких потоков в один и тот же сокет.
butcher ответил правильно — можно. Могу лишь добавить что лучше при этом не пользоваться асинхронным I/O
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.