Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.02 c
6-96935
EsKor
2002-12-06 04:12
2003.01.30
Server/ClientSocket


1-96830
Kair
2003-01-20 20:16
2003.01.30
То, сё


3-96614
desha
2003-01-13 22:55
2003.01.30
Прервать перебор записей таблицы по Esc


6-96930
mdaemon
2002-12-04 13:40
2003.01.30
Как зделать чтобы прога исполнялась в определённое время?


1-96702
devil_83
2003-01-22 09:17
2003.01.30
Скопировать файл