Конференция "Сети" » Сокеты. Ограничение коннектов к серверу [D7, WinXP]
 
  • Цукор5 (13.12.11 01:10) [20]

    > Запустил клиента и тут же пинком выгнал его без объяснения
    > ему причин в отказе обслуживания.Зачем, спрашивается, тогда
    > вообще нужно было его запускать ?


    А ему, клиенту, какая разница? Он ведь не живой )))
    Так правильно я сделал или нет? Обеспечивает ли мой код работу только с одним клиентом?
  • Цукор5 (13.12.11 01:12) [21]

    > Ты немного не правильно представляешь себе ситуацию. Когда
    > соединение устанавливается через слушающий сокет - для него
    > создается отдельный сокет, хэндл которого тебе и возвращает
    > accept. После чего слушающий можно закрывать и работать
    > с установленным соединением.


    Все я правильно понимаю. Мне не нужно закрывать слушающий сокет ибо сервер будет работать 24/7.  Мн нужно ждать новых клиентов и даже работать с ними, если "очередь" пуста.
  • Anatoly Podgoretsky © (13.12.11 09:48) [22]

    > Да, я действительно делаю Accept

    Для чего?
  • Rouse_ © (13.12.11 10:23) [23]

    > Мне не нужно закрывать слушающий сокет ибо сервер будет
    > работать 24/7.

    Так тыж сам сказал что тебе нужно только одно соединение. Вопрос, нафига тебе сервер, если соединение уже установлено? Не, ну если нужно - значит нужно...
  • Сергей М. © (13.12.11 11:03) [24]

    > клиенту, какая разница? Он ведь не живой


    Как это какая ? И как это не живой ?

    Ты ж его запустил в ларек и он справедливо полагает что сейчас его обслужат, раз уж он вошел).. А ты и не собираешься его обслуживать - ты другим, перед этим вошедшим клиентом в этот момент занят - вновь вошедшему ты попросту молча даешь пинка).. Зачем тогда пускал его ?))
  • Сергей М. © (13.12.11 11:16) [25]
    В схеме по умолчанию происходит вот что:

    // момент 0
    Listen(ListeningServerSocket, 5);
    ..
    // момент 1

    в этот момент из 10-ти потециальных клиентов, попытавшихся законнектиться, подтверждение коннекта УЖЕ получат первые пятеро из них (ВНЕ зависимости от того что ни одна Accept() сервером еще не выполнена ) и они будут ждать обслуживания, остальные же пять получат отлуп.
    ..
    // момент 2
    // здесь для обслуживания очередного клиента из пяти УЖЕ законнекченных создается ассоциированное с ним отдельное кл.гнездо, без которого собственно обслуживание этого клиента не возможно

    NewClientConnectionSocket := Accept(ListeningServerSocket, ..);
    ..
    // момент 3
    // очередь уменьшилась на 1, теперь 1 из 5-ти клиентов, получивших ранее отлуп, при повторной попытке может успешно законнектиться, оставшиеся 4 по прежнему получат отлуп
  • Сергей М. © (13.12.11 11:20) [26]
    Accept() выгребает из очереди УЖЕ законнекченных клиентов (если таковые там имеются) очередного клиента, создает и ассоциирует с ним сокет.

    Если очередь пуста, Accept() ждет ее пополнения (в блок. режиме) либо запускает операцию ожидания (в неблок. режиме) и возвращает управление.
 
Конференция "Сети" » Сокеты. Ограничение коннектов к серверу [D7, WinXP]
Есть новые Нет новых   [134435   +13][b:0][p:0]