Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.034 c
6-1086028320
BBCHa
2004-05-31 22:32
2004.08.29
Блокировка пакетов.


1-1092308900
Deedlit
2004-08-12 15:08
2004.08.29
Проблемы с кодировками


9-1084382986
Dimaxx
2004-05-12 21:29
2004.08.29
Раскраска текстуры


8-1086717077
Дана
2004-06-08 21:51
2004.08.29
Градиентная заливка формы


1-1092121273
ALS
2004-08-10 11:01
2004.08.29
TListImage и разрешение экрана





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский