Форум: "Сети";
Текущий архив: 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.013 c