Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Вниз

ф-я 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
1-96866
lightix
2003-01-21 10:30
2003.01.30
Динамическое формирвание меню - подскажите как лучше сделать


3-96626
bkv
2003-01-14 10:52
2003.01.30
Инсталяция BDE


3-96529
pave1
2003-01-13 21:48
2003.01.30
Проверить структуру базы данных


1-96688
Calm
2003-01-20 13:49
2003.01.30
Работа приложения во время бездействия. Парадокс какой-то!


14-96982
Berg
2003-01-13 10:17
2003.01.30
Необходимо создать дистрибутив для приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский