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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
6-87000
RGG
2002-11-27 13:29
2003.01.27
Помогите примером


4-87208
XHunter
2002-12-12 21:03
2003.01.27
Приложение ассоциированное с данным типом файла...


9-86617
Dead User
2002-07-23 11:41
2003.01.27
Проблема с вращением


1-86742
Думкин
2003-01-17 09:05
2003.01.27
Прорисовка


6-87001
Maksss
2002-11-28 21:20
2003.01.27
Пример Чата из Delphi5