Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите разобраться с анихронным сокетом  (Прочитано 6333 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Евгений З.
Гость
« : 07-04-2004 07:22 » 

Добрый день.

Я делаю пару: клиент-сервер. И на обоих сторонах пытаюсь пользоваться асинхронными сокетами с помощью функции

WSAAsyncSelect(......., FD_CONNECT | FD_CLOSE | FD_READ);

Обычно всё идёт нормально. НО!! Мне нужно, чтобы сервер держал только одно (первое) соединение, и все последующие отбивал. Поэтому когда сервер получает второй вызов он делат:

1 accept с приёмом соединения
2 send посылка сообщения что сервер занят
3 closesocket

Так вот проблема в том, что на клиенте сообщения приходят совершенно в другой последовательности:
1 FD_CLOSE - соединение закрыто
2 FD_READ - пришли данные
3 FD_CONNECT - соединение установлено.

Кто-нибудь может мне что-нибудь подсказать по этому поводу?

С Увжением, Евгений.
Записан
Skubent
Гость
« Ответ #1 : 07-04-2004 07:43 » 

Паузы выставить после установки соединения/отсылки сообщения.
Записан
Евгений З.
Гость
« Ответ #2 : 07-04-2004 08:22 » 

Паузы - это конечно выход. НО мне же надо будет через соединение гнать поток данных. Так где гарантия, что они придут в нужной последовательности?
Записан
ixania
Гость
« Ответ #3 : 11-04-2004 11:42 » 

При установке соединения просто закрывай слушающий сокет, а при разрыве соедененного открывай его опять, на клиенте обычно FD_CONNECT не ловят, можно обойтись  FD_READ и  FD_CLOSE. Ты ловишь FD_READ после FD_CLOSE т.к. у тебя на сокете есть ожидающие данные, так что при FD_CLOSE рекомендуется произвести чтение из сокета а потом закрыть его. Также разрыв соединения можно иницировать со стороны клиента при приеме предупреждающего пакета о занятости сервака.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines