Текущий архив: 2003.01.30;
Скачать: CL | DM;
Внизф-я connect завершается успехом раньше чем вызывается accept=((( Найти похожие ветки
← →
LeReve (2002-11-29 15:08) [0]кто знает! почему при втором соединение с серваком сомманда connect у клиента завершается (причём успешно!!!) до комманды accept на сервере???
(создают сокеты, 2 на серваке(слушающий и для передачи данных)и 1 другой на клиенте, после окончания передачи файла слиент закрывает сокет, НО при создании следующего сокета, его порядковый номер выше!!!(т.е сокет вроде как бы и не закрыт) если сокет вообще не закрывать у клиента а создавать новый то всё ОК работает! а иначе connect завершается упехом без accept-a
(Только под 2000-й, под 98 порядок!)
← →
Digitman (2002-11-29 15:23) [1]
> при создании следующего сокета, его порядковый номер выше!!!> > (т.е сокет вроде как бы и не закрыт)
значение хэндла нового гнезда не имеет никакого отношения к состоянию "закрытости" или "открытости" другого, ранее существовавшего гнезда
> сомманда connect у клиента завершается (причём успешно!!!)
> до комманды accept на сервере
см. setsockopt() и опцию SO_CONDITIONAL_ACCEPT
А вообще - приведи код сервера.
Каша какая-то - "2 на серваке(слушающий и для передачи данных)"
← →
LeReve (2002-11-29 20:05) [2]очень много переносить предётся, тем более всё по раным модулям....
у сервака одн сокет просто находится в режиме Listen(sock,10)
WsaAsyncSelect(sock,hwin,msg,FD_ACCEPT)
когда конестится клиент то посылается вызываю
datasock:=accept(sock,@name,!size);
при первой попытки соеденениея всё работает!
но при второй же у клиента connect срабытывает раньше чем тут вызовится ф-я accept, только но win2000! под 98 работает то
← →
Digitman (2002-11-30 12:42) [3]
> срабытывает раньше чем тут вызовится ф-я accept
Это нормально для любой ОС (вернее, для любой платформенной реализации WINSOCK).
W2k "умеет" организовывать настоящий условный акцепт. Для этого у "слушающего" серверного гнезда опцию SO_CONDITIONAL_ACCEPT нужно устаноыить в True (см. setsockopt). Делать это следует ДО вызова listen(). Для настоящего условного акцепта в этом случае следует вызывать WSAAccept() вместо accept().
Если не предусмотреть эти условия, то - можешь вообще у сервера убрать вызов accept() - вызов клиентом ф-ции connect() всегда будет успешен, ибо "слушающее" гнездо при получении SYN-пакета ВСЕГДА ответит пакетом SYN-ACK (подтверждение). В случае же условного акцептирования этого не происходит до момента возврата из WSAAccept(), при обработке которого сервер имеет возможность либо акцептировать запрос на соединение (вернуть клиенту SYN-ACK, в рез-те чего вызов connect() завершается успешно) либо отвергуть запрос на соединение (вернуть клиенту RST, в рез-те чего вызов connect() завершается с отказом "запрос на соединение отвергнут")
← →
LeReve (2002-11-30 18:03) [4]хммм, тогда почему при первой попытке соединения connect не завершается успешно пока не будит произведён accept???
← →
LeReve (2002-11-30 18:11) [5]ты конешно не обижайся, но чушь какая то если честно =))))
особенно мне понравилось про опцию
SO_CONDITIONAL_ACCEPT =)))
классная опция! я её класно использовать в локальных дискипротрных таблицах =)) а лучше когда седмой бит байта AR установлен в 1!!!
← →
Digitman (2002-12-01 11:41) [6]
> ты конешно не обижайся, но чушь какая то если честно
ты конешно не обижайся, но вот эту чушь понять не в состоянии :
> я её класно использовать в локальных дискипротрных таблицах
по-русски повтори)
> а лучше когда седмой бит байта AR установлен в 1
на кой черт тебе в какие-то "таблицы" лезть, когда есть документированный способ организовать условный акцепт ?
приведи код сервера
← →
LeReve (2002-12-01 15:50) [7]хаха =))) артист! =))))))))))))))))
SO_CONDITIONAL_ACCEPT где ты вообще такую опцию нашёл то???
и в какой версии делфи????
а локальные дискрыпторые таблицы отображают структуру организации защищённого режима =))) а байт АR описывает параметры сегмента, он является частью дескриптора!!!
← →
Digitman (2002-12-02 08:54) [8]бред какой-то)
при чем здесь защищ.режим и Делфи ? чего ты несешь ?
есть спецификация Winsock, ее использование документировано в MSDN, в т.ч. - и использование опции усл.акцепта
← →
LeReve (2002-12-02 15:34) [9]=))) подравилось про дескрипроры??? =)))
ну а если серьёзно такой опции даже в хелпах нет
SO_CONDITIONAL_ACCEPT
← →
Digitman (2002-12-02 15:53) [10]
> ну а если серьёзно такой опции даже в хелпах нет
Да мало ли там чего еще нет ! Иди на msdn.microsoft.com, задавай модель поиска SO_CONDITIONAL_ACCEPT и имей полную информацию)
Давно б уж сходил и выяснил, что к чему... а ты все треплешься)
Оно мне надо ? Оно тебе надо, а не мне !)
Когда это мне понадобилось, я навел справки и выяснил что к чему)
Поэтому и тебе советую, потому что это - единственный верный способ реализовать настоящий условный акцепт с полным пониманием сути проблемы.
Заодно найди и скачай себе winsock2.pas, там константа SO_CONDITIONAL_ACCEPT имеет определение.
Страницы: 1 вся ветка
Текущий архив: 2003.01.30;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.009 c