Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

Каюсь, каюсь, каюсь-юсь... :(   Найти похожие ветки 

 
Kurtevich   (2004-08-06 15:02) [0]

Хочу извиниться перед мастерами за всю ту пургу, которую я нес в недавних обсуждениях (ну вы помните...) - я был неправ и не знаю что это на меня нашло. Просто депрессняк был жуткий и хотелось с кем-то поругаться... :( Вобщем извините :)

Ну и, конечно, вы ж понимаете, что я бы не стал снова здесь появляться, если б у меня не было вопроса... Сразу скажу - нет никакой проблемы и Дельфи ни в чем не виновата. Просто это как-то странно ... для меня.

Фишка вот в чем. Есть код

constructor kClient.Accept(poServer: kSocket);
var viLen: integer;
 vxaddr: sockaddr;
begin
 viLen := sizeof(vxaddr); { ! }
 if poServer<>nil then foSocket := winsock2.accept(poServer.Handle, @vxaddr, @viLen)
 else foSocket := INVALID_SOCKET;
 if foSocket <> INVALID_SOCKET then foAddress := kSockAddr.Create(vxaddr)
 else if not fbDontRaise then raise kSocketError.Create();
end;


Строчки, отмеченной { ! } не было, хотя понятно, что она нужна, я просто упустил эту "мелочь". Важно то, что даже без нее все это чудно работало, пока я не начал запускать эту функцию в цикле... Режим синхронный, т.е. блокирующий, и не срабатывало сразу при первом же проходе, возвращая ошибку "bad address"... То есть в принципе разницы никакой не должно было быть, но тем не менее она была! Загадка...


 
Digitman ©   (2004-08-06 15:35) [1]

какой точный код ошибки, возвращаемый ф-цией accept() ?


 
han_malign ©   (2004-08-06 16:10) [2]

>без нее все это чудно работало
- в стеке(на месте локальной переменной viLen) лежал мусор, со значением больше sizeof(vxaddr) (везет тебе, как утопленнику), а после введения цикла, структура вызовов(и замусоривания стека) изменилась, и значение стало меньше требуемого, а значит структура vxaddr не заполнялась(сохраняя мусор из того стека)...
Теперь вниматочно почитать описание функции accept - вот и все чудеса.

З.Ы. Не знаю как у вас, а у нас, у учителя информатики, любимая фраза была "Всегда инициализируйте переменные".

Вот ведь - много хорошо, тоже плохо - приучил Borland к халяве со своим авто-обнулением полей объекта...


 
Digitman ©   (2004-08-06 16:39) [3]


> han_malign ©   (06.08.04 16:10) [2]


> Не знаю как у вас


и у вас и у нас, согласись, есть перед носом куча исходников различных гнездовых компонентов от Борланда, где accept() успешно используется ... исходники эти Борланд поставлял не для Пушкина, которому они уже давно нафих не нужны, а для тех кто старается всемерно использовать чужой опыт, изучая эти исходники, и не набивать шишек, спотыкаясь на каждом пеньке)


 
DiamondShark ©   (2004-08-06 17:06) [4]


> гнездовых компонентов

"Был последний домовой, стал первый гнездовой!" (ц)


 
Kurtevich   (2004-08-07 16:26) [5]


> han_malign ©   (06.08.04 16:10) [2]

Версия конечно карсивая, и очень правдоподобная,... но кажется это маловероятно - тем более что в асинхронном режиме я юзал ее и в цикле и не в цикле, и в разных позах, и долго - недели две! ни разу она не заставила меня заподозрить, что я чего-то там недописал... нельзя же быть настолько "везучим"!
P(A)->0
А разве локальные переменные хранятся в стеке? bizzaire... Я вабще-то всегда лелеял тайную надежду, что дельфи автоматом обнуляет все создаваемые переменные... кажется насколько я помню всяческие спотыкания об брейкпоинты, значения по крайней мере указателей на обьекты вроде всегда в начале nil... хотя фиг его знает.
Вот помню getsockopt сразу возвращала глюк, когда я забывал обналичить аналогичный параметр! Только ошибка была какая-то неявная, так что я не сразу понял в чем дело.


 
Mike Kouzmine ©   (2004-08-07 16:43) [6]

Kurtevich   (06.08.04 15:02)  Вы не умеете каяться. Почитайте исходники. Желательно до времен блаженного Августина.


 
Anatoly Podgoretsky ©   (2004-08-07 17:06) [7]

Да какое то покаюние нетичное

(с) Иван Васильевич меняет профессию


 
Sergey Kaminski ©   (2004-08-07 18:01) [8]

History repeats itself...


 
VID ©   (2004-08-07 22:38) [9]

Kurtevich, слышь, тебе больше нельзя спорить :) Меняй ник, этот уже приехал.


 
Verg ©   (2004-08-07 22:42) [10]


> , этот уже приехал.


у нас в конторе бытует термин - "наелся"......



Страницы: 1 вся ветка

Текущий архив: 2004.08.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
1-1092394710
snake1977
2004-08-13 14:58
2004.08.29
QuickReport


14-1092322402
User_OKA
2004-08-12 18:53
2004.08.29
Siemens CX65


6-1086981860
Dimaxx
2004-06-11 23:24
2004.08.29
Скачивание файлов с использованием wininet


14-1091808209
Aspi
2004-08-06 20:03
2004.08.29
DOOM 3


14-1091910277
Алекс_
2004-08-08 00:24
2004.08.29
Где бы скачать новые компоненты FastNet?