Здравствуйте, Davidian, Вы писали:
D>Вопрос такой:
D> Есть несколько потоков посылающие данные одному сокету с помощью ф-ции send.
D> Может ли Windows прервать выполнение потока во время вызова send? То есть, если каждый поток посылает блок данных с помощью одного вызова send, есть ли гарантия, что этот блок данных передастся клиенту в том виде в котором он послан и не прервется send другим потоком (не произойдет смешивание данных от разных потоков)?
Смешиваение не произойдёт, но последовательность наршуится может, если вы не будете контролировать это.
Davidian wrote:
> Вопрос такой:
> Есть несколько потоков посылающие данные одному сокету с помощью ф-ции send.
> Может ли Windows прервать выполнение потока во время вызова send? То есть, если каждый поток посылает блок данных с помощью одного вызова send, есть ли гарантия, что этот блок данных передастся клиенту в том виде в котором он послан и не прервется send другим потоком (не произойдет смешивание данных от разных потоков)?
Для UDP дейтаграмм этого произойти не может.
Для TCP потоков тоже — для каждого клиента одного серверного TCP сокета у тебя в сервере будет отдельное TCP соединение (сокет, полученный при помощи accept). Данные от отдельных клиентов не "перемешиваются".
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9
Здравствуйте, MaximE, Вы писали:
ME>Для TCP потоков тоже — для каждого клиента одного серверного TCP сокета у тебя в сервере будет отдельное TCP соединение (сокет, полученный при помощи accept). Данные от отдельных клиентов не "перемешиваются".
Вопрос, насколько я понял был в другом — можно ли отсылать данные из нескольких потоков в один и тот же сокет.
butcher ответил правильно — можно. Могу лишь добавить что лучше при этом не пользоваться асинхронным I/O