![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Error 5 при вызове функции Bind
Alral © (2008-08-21 01:28:00)Здравствуйте.
У меня вопрос: в моей программе функция Bind возвращает ошибку. При этом функция WSAGetLastError возвращает ошибку 5. Насколько я знаю, это ошибка не WinSock. Почему она может вызываться в данном случае?
Спасибо.
Александр
Alral (2008-08-22 17:07:00) [1]В том то и дело, что выше. В функции Socket. Нашёл благодаря тому, что вы напомнили о Handle сокета.:
> Сергей М. © (22.08.08 15:16) [10]
Сергей М. (2008-08-22 16:52:00) [2]
> Alral © (22.08.08 16:35) [13]
Опечаток в приведенном коде не видно ...
Все вроде бы корректно и ""благопристойно" ..
Alral (2008-08-22 16:35:00) [3]Это даже не ошибка, а скорее, опечатка.
Глупейшим образом забыл присвоить переменной сокет. После этого этот самый несуществующий сокет пытался привязать с использованием Bind.
Сергей М. (2008-08-22 16:16:00) [4]
> заметил у себя глупейшую ошибку
Показал бь уж ее достопочтенной публике)
Мало ли кто еще эти грабли испытать захочет)
Alral (2008-08-22 16:13:00) [5]
> Сергей М. © (22.08.08 15:16) [10]
Всё уже понял, только что заметил у себя глупейшую ошибку...
Спасибо что указали на сокет.
> sniknik © (22.08.08 15:09) [9]
Когда всё это делал, не знал про SysErrorMessage. Отдельное спасибо за [6].
Сергей М. (2008-08-22 15:16:00) [6]
> то, что это File access denied, я знаю, но связь с WinSock
> найти не могу
Связь вообще-то имеется.
Хэндл сокета, при определенных условиях, можно и должно считать файловым дескриптором.
Твои или не твои это условия - тебе знать лучше)
Ты ведь метнул огрызок кода, а нам не ведомо, как ты собрался работать с транспортом ..
sniknik (2008-08-22 15:09:00) [7]> Далеко не всё, только то, что посчитал вероятным
смысл считать вероятности, и делать криво, если получить все возможное можно гораздо меньшими усилиями, тратя меньше ресурсов, + с локализацией. см. [6].
> то, что это File access denied, я знаю
причем тут файл? это см. [2], к чему конкретно это по контексту.
Сергей М. (2008-08-22 15:02:00) [8]А почему не указал ОС в топике ?
Alral (2008-08-22 14:51:00) [9]
> Сергей М. © (22.08.08 08:47) [5]
Нет. Просто тестовый сервер.
> sniknik © (22.08.08 10:46) [6]
Далеко не всё, только то, что посчитал вероятным (чтобы постоянно не бегать в MSDN). А то что нужно я не нашёл (то, что это File access denied, я знаю, но связь с WinSock найти не могу).
sniknik (2008-08-22 10:46:00) [10]> //функция обработки ошибок
нет слов. там что же все 997 (11001 - 10004) строк расписаны? а того что нужно нет... какая ирония.
заменяется на
function TfMain.TestError(ErrorCode: Integer): String;
begin
Result:='Error '+IntToStr(ErrorCode)+': '+SysErrorMessage(ErrorCode);
end;
Сергей М. (2008-08-22 08:47:00) [11]Хм ..
А ты случаем не сниффер сочиняешь ?
Alral (2008-08-22 00:43:00) [12]
> Сергей М. © (21.08.08 08:28) [3]
Простите, а что же тогда?
Код:
//Заполняю SockAddr_In
LocalAddress.sin_family:=AF_INET;
LocalAddress.sin_port:=HToNs(55555);
LocalAddress.sin_addr.S_addr:=HToNl(InAddr_Any);
//связываю сокет функцией bind
if Bind(scListen, LocalAddress, SizeOf(LocalAddress))=SOCKET_ERROR then begin
mInfo.Lines.Add(TimeToStr(GetTime)+'*Error binding the socket with local address');
mInfo.Lines.Add(TestError(WSAGetLastError));
CloseSocket(scListen);
Exit;
end;
mInfo.Lines.Add(TimeToStr(GetTime)+'*Socket bound with local address');
//функция обработки ошибок
function TfMain.TestError(ErrorCode: Integer): String;
begin
case ErrorCode of
10004: Result:='Error 10004: Interrupted function call';
...
11001: Result:='Error 11001: Host not found'
else
Result:='Error '+IntToStr(ErrorCode)+': Unknown error';
end;
end;
Функция возвращает 'Error 5: Unknown error'
Сергей М. (2008-08-21 08:28:00) [13]Значит Bind возвращает неошибку.
sniknik (2008-08-21 08:23:00) [14]> возвращает ошибку 5
отказано в доступе
brother (2008-08-21 04:53:00) [15]какие вопросы могут быть без кода? пока, ошибка в 17 строке...