Linux - Could not bind socket to port... Address already i

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
anvpro
незнакомец
Сообщения: 3
Зарегистрирован: 13.10.2009 12:46:55

Linux - Could not bind socket to port... Address already i

Сообщение anvpro »

Помогите кто чем сможет (но лучше примером успешной борьбы)
Использую Lazarus v 0.9.28.2 fpc 2.2.4 Linux Slackware 12.2
Любая попытка запустить программу с серверным сокетом на базе TTCPServer
а так же все сервера Indy indy-10.2.0.3 при активации сокета в успешно откомпилированной программе
выдают абсолютно одинаковую ошибку типа

exception at 08060F0C:
Could not bind socket to port 18888: Address already in use.

при чем, не важно какой порт и на каком адресе мы пытаемся создать, думал не хватает прав - под рутом тоже самое
думал косяк в fpc обновил его до 2.4.0
тоже самое...

хотя, собираю тот же самый проект под винды, запускаю - все работает...
кто-нибудь уже сталкивался с подобной проблемой?
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

Подозреваю, что Вы биндите сокет под ipv6, а в системе - ipv4, или наоборот ^_^ По-крайней мере я сталкивался с похожим и проблема была именно в этом. Но очень советую отказаться от indy - с fpc оно иногда порождает странные и необъяснимые глюки. Или просто руки у меня такие ^_^
anvpro
незнакомец
Сообщения: 3
Зарегистрирован: 13.10.2009 12:46:55

Сообщение anvpro »

Я вообще предчувствовал что глюка зарыта в поддержке ip шестой версии
и пытался indy указывавать ip v4
но что-то не помогало совсем - может не так указывал на самом деле

Самое смехотворное что у меня в wine все работает, а комплирую в линукс - ошибка
я в шоке :(
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

Каким-то чудом после форматирования ж0ского один старый проект оказался среди спасённых, ещё с indy ^_^ Я это решал так

Код: Выделить всё

Constructor BServer.Build;
var
  SocketHandle: TIdSocketHandle;
Begin
  Inherited Create;
  SocketHandle := TIdSocketHandle.Create(Bindings);
  SocketHandle.IPVersion := Id_IPv6;
  SocketHandle.Port := 7667;
  DefaultPort := 7667;
  OnExecute := Execute;
  Active := TRUE;
End;
Ответить