Помогите кто чем сможет (но лучше примером успешной борьбы)
Использую 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
тоже самое...
хотя, собираю тот же самый проект под винды, запускаю - все работает...
кто-нибудь уже сталкивался с подобной проблемой?
Linux - Could not bind socket to port... Address already i
Модератор: Модераторы
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Подозреваю, что Вы биндите сокет под ipv6, а в системе - ipv4, или наоборот ^_^ По-крайней мере я сталкивался с похожим и проблема была именно в этом. Но очень советую отказаться от indy - с fpc оно иногда порождает странные и необъяснимые глюки. Или просто руки у меня такие ^_^
Я вообще предчувствовал что глюка зарыта в поддержке ip шестой версии
и пытался indy указывавать ip v4
но что-то не помогало совсем - может не так указывал на самом деле
Самое смехотворное что у меня в wine все работает, а комплирую в линукс - ошибка
я в шоке
и пытался indy указывавать ip v4
но что-то не помогало совсем - может не так указывал на самом деле
Самое смехотворное что у меня в wine все работает, а комплирую в линукс - ошибка
я в шоке
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Каким-то чудом после форматирования ж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;
