Форум: "Потрепаться";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
ВнизКаюсь, каюсь, каюсь-юсь... :( Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c