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

Вниз

BroadCast (эксперемент)   Найти похожие ветки 

 
NickolayLI   (2002-12-02 13:02) [0]

Привет всем
есть кусок:
var
WSAData:TWSAData;
addr:sockaddr_in;
sock:TSocket;
buf:array[0..15] of char;
gh: BOOL;
Init: TWSAData;
begin
WSAStartup( $101,Init );
memo1.lines.Add("[Initializing]");
sock := socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
gh := TRUE;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, @gh , sizeof(gh));
Showmessage(Inttostr(WSAGetLastError()));
addr.sin_addr.S_addr:= INADDR_BROADCAST;
addr.sin_family := AF_INET;
addr.sin_port := htons(7);
memo1.lines.Add("[UDP client, port 7]");
buf:="1";
while buf<>"" do begin
memo1.lines.Add("= Please enter buffer to send: ");
sendto(sock,buf,sizeof(buf),0,addr,sizeof(addr));
Application.ProcessMessages;
end;
closesocket(sock);
WSACleanUp;
end;

Почему же WSAGetLastError() возвращает всегд 0? не поянтно :((


 
Song   (2002-12-02 13:14) [1]

Ага, однако уже же не -1.. А то ты тут говорил что типа WSAGetLastError() возвращает -1!?


 
Digitman   (2002-12-02 13:19) [2]


> Почему же WSAGetLastError() возвращает всегд 0? не поянтно
> :((


А почему бы ему не вернуть 0 ? Непонятно)
Зачем вообще вызывать WSAGetLastError(), если предыдущая ф-ция не вернула отказ ? Это бессмыслица.

Ведь черным по белому же написано в хэлпе про анализ рез-та (почти любого !) winsock-вызова (в дан.случае - setsockopt):

If no error occurs, setsockopt returns zero.

Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.


 
nickolayLI   (2002-12-02 13:25) [3]

это так понимается "If no error occurs, setsockopt returns zero" - "если нет ошибок, то возвратить ноль" так ведь?
Ладно, а почему же тогда результат
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, @gh , sizeof(gh)) не возвращает нуль :(


 
Digitman   (2002-12-02 13:27) [4]

Перевести еще может быть ?

"Если не обнаружены ошибки, ф-ция SETSOCKOPT возвращает значение 0.

В противном случае будет возвращено значение SOCKET_ERROR, а специфичный для возникшей ошибки код может быть получен в результате вызова ф-ции WSAGetLastError()
"
GetLastError = получить код последней возникшей ошибки !
Так если не было ошибки при вызове SETSOCKOPT, какой же код, спрашивается, ты собираешься получить ?) Вот ты и получаешь 0 как сигнал для "фомы неверующего" о том, что SETSOCKOPT не вызвала никакой ошибки)))


 
nickolayLI   (2002-12-02 13:31) [5]

м-да... :) ладно дальше копаемся


 
Digitman   (2002-12-02 13:31) [6]


> Ладно, а почему же тогда результат
> setsockopt(sock, SOL_SOCKET, SO_BROADCAST, @gh , sizeof(gh))
> не возвращает нуль :(


А где это видно из твоего кода ? Где вообще в этом коде ты предусмотрел анализ результата ХОТЯ БЫ ОДНОЙ Winsock-ф-ции ? Я не вижу ничего. Может, мне надо пенсне нацепить ?) Типо - "мартышка к старости слаба глазами стала" ?


 
Digitman   (2002-12-02 13:34) [7]


> м-да... :) ладно дальше копаемся


да чего там копаться-то ?
для setsockopt() и всех ф-ций, возвращающих 0 как факт успешного выполнения - один и тот же анализ :

if WinsockFunc(...) <> 0 then
begin
case WSAGetLastError() of
...
else
...
end;

end;


 
nickolayLI   (2002-12-02 13:35) [8]

if setsockopt(sock, SOL_SOCKET, SO_BROADCAST, @gh , sizeof(gh)) = 0 then begin
....
end else begin
closesocket(socket);
WSACleanUP;
exit;
end;


 
Digitman   (2002-12-02 13:37) [9]


> nickolayLI


Ну ты и упрям, сударь)

Тебя что, не интересует, почему КОНКРЕТНО отказала setsockopt(), если она отказала в принципе ? Закрыл гнездо и - до свиданья ?)


 
nickolayLI   (2002-12-02 13:50) [10]

ну а почему тогда она отказала? :(


 
Digitman   (2002-12-02 13:53) [11]

почему-почему) ... потому !! ты узнаешь об этом, только проанализировав код, возвращенный ф-цией WSAGetLastError()


 
nickolayLI   (2002-12-02 14:03) [12]

2>Digitman
Так ладно, тогда получается, что этот кусок работать не будет?
while buf<>"" do begin
memo1.lines.Add("= Please enter buffer to send: ");
sendto(sock,buf,sizeof(buf),0,addr,sizeof(addr));
Application.ProcessMessages;
end;


 
Digitman   (2002-12-02 14:10) [13]


> nickolayLI


если setsockopt(so_broadcast) отказала, разумеется - не будет)
да даже если и не отказала, как я тебе скажу - будет или не будет ? ты ж и здесь результат sendto() не анализируешь)



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

Форум: "Сети";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
14-87036
grab3
2003-01-10 16:39
2003.01.27
Help me please!!!


1-86956
Igit
2003-01-17 10:08
2003.01.27
Загрузка картинки в Imageshow


1-86779
skirdov
2003-01-18 01:11
2003.01.27
DBLookupComboBox


1-86821
Кен
2003-01-18 04:44
2003.01.27
Как проще в массиве найти минимальное и максимальное значение ?


3-86723
Вованчик
2003-01-08 08:52
2003.01.27
Генераторы





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