Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 строке...


Наверх

Титульная страница Поиск, карта сайта Написать письмо