On-line: tnsr2, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 17
Зарегистрирован: 28.07.10
ссылка на сообщение  Отправлено: 26.10.10 05:47. Заголовок: Что-то hb_InetServer косячит?


//oSocket:=hb_InetServer( nLocalPort, cLocalAdr )
oSocket:=hb_InetServer( nLocalPort)

при передаче второго аргумента в виде строки с ip-адресом в десятично-точечной нотации - выпадает на ошибку


Кто нибудь применял второй аргумент?



Заодно - тут у меня<\/u><\/a> некоторая документашка по HB_INET* функциям
Может кому пригодится



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 6 [только новые]





Пост N: 19
Зарегистрирован: 28.07.10
ссылка на сообщение  Отправлено: 27.10.10 08:12. Заголовок: Есть ли потребность ..


Есть ли потребность доработать документашку по HB_INET*() до приличного вида?
Или где-то уже есть? - тогда скажите мне.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1679
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.10.10 09:45. Заголовок: А какая ошибка ?..


А какая ошибка ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 979
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 27.10.10 20:31. Заголовок: SADSTAR33 пишет: пр..


SADSTAR33 пишет:

 цитата:
при передаче второго аргумента в виде строки с ip-адресом в десятично-точечной нотации - выпадает на ошибку


Pasha пишет:

 цитата:
какая ошибка ?


А там одна ошибка может быть - EG_ARG, ошибочный параметр
С проверками намудрили, короче косяк в Harbour, если второй параметр не указатель на сокет - RTE

Для илюстрации

PROCEDURE main 
LOCAL socket, oErr

hb_inetInit()

BEGIN SEQUENCE WITH {|e| Break( e )}
socket := hb_inetServer( 5000, "127.0.0.1" )
RECOVER USING oErr
? oErr:description
END

? hb_inetIsSocket( "127.0.0.1" )

socket := hb_inetConnectIP( "127.0.0.1", 5000 )

IF hb_inetIsSocket( socket )
? hb_inetPort( socket )

socket := hb_inetServer( 4500, socket )

? hb_inetIsSocket( socket )
? hb_inetPort( socket )
ENDIF

hb_InetCleanup()


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 20
Зарегистрирован: 28.07.10
ссылка на сообщение  Отправлено: 28.10.10 00:39. Заголовок: Pasha пишет: А кака..


1.
Pasha пишет:

 цитата:
А какая ошибка ?


 
Date: 26.10.10 Time: 10:08:50
Error BASE/3012 Argument error: HB_INETSERVER

Called from HB_INETSERVER(0)
Called from CREATELISTENSOCKET(238)
Called from START(141)
Called from (b)MAIN(48)
Called from _DOCONTROLEVENTPROCEDURE(1715)
Called from EVENTS(1444)
Called from _DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1450)
Called from MAIN(62)


2.
Петр пишет:

 цитата:
Для илюстрации


Правильно ли я понял, что вы предложили вариант подстановки локального адреса в серверный сокет?
Но Локальный адрес не сохраняется. Или я неправильно делаю?
 
C:\Harbour_projects\Proba_InetErr>proba1.exe
Argument error
.F.
socket:=hb_inetConnectIP( "127.0.0.1", 5000 )
socket.addr= 127.0.0.1
socket.Port= 5000

socket:=hb_inetServer( 4500, socket )
.T.
socket.addr= 0.0.0.0
socket.port= 4500


3.
А нельзя ли использовать HB_SOCKETBIND() для установки адреса?
Или функции HB_SOCKET*() и HB_INET*() смешивать нельзя?
И что - переделывать все на HB_SOCKET*()?
Или можно поправить HB_InetServer()?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 980
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 29.10.10 11:52. Заголовок: SADSTAR33 пишет: Пр..


SADSTAR33 пишет:

 цитата:
Правильно ли я понял, что вы предложили вариант подстановки локального адреса в серверный сокет?
Но Локальный адрес не сохраняется.


Нет, просто это первое, что мне пришло в голову (я имею ввиду адрес). Не сохраняется ни адрес, ни порт.
Там по ходу существующий сокет закрывается.
SADSTAR33 пишет:

 цитата:
А нельзя ли использовать HB_SOCKETBIND() для установки адреса?
Или функции HB_SOCKET*() и HB_INET*() смешивать нельзя?
И что - переделывать все на HB_SOCKET*()?
Или можно поправить HB_InetServer()?


HB_INET*() семейство использует C API функции HB_SOCKET*().
HB_InetServer не только можно, но и нужно поправить.
Вместо
if( ! HB_ISNUM( 1 ) || ( socket == NULL && ! HB_ISNIL( 2 ) ) )
написать
if( ! HB_ISNUM( 1 ) || ( socket == NULL && ! HB_ISCHAR( 2 ) ) )


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 985
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 31.10.10 23:34. Заголовок: Петр пишет: написат..


Петр пишет:

 цитата:
написать
if( ! HB_ISNUM( 1 ) || ( socket == NULL && ! HB_ISCHAR( 2 ) ) )


Нет [img src=/gif/smk/sm40.gif]
Разобрался только с помощью xHarbour Language Reference

 цитата:
INetServer( <nPort> , ;
[<pRawSocket>] , ;
[<cIPAddress>] , ;
[<nMaxConnections>]) --> pServerSocket


Оказывается у INetServer должно быть 4, а не 3 параметра!
И строка с ip-адресом в десятично-точечной нотации - это должен быть третий параметр.
Второй параметр или NIL или "сырой" сокет получаемый функцией INetCreate() (документация о которой в xHarbour Language Reference умалчивает о параметре timeout).
Вот такая неразбериха.

Значит косяки есть в Harbour и в xHarbour.
Для Harbour в src/rtl/hbinet.c заменяем

 цитата:
const char * szAddress = hb_parc( 2 );
int iListen = hb_parnidef( 3, 10 );


на

 цитата:
const char * szAddress = hb_parc( 3 );
int iListen = hb_parnidef( 4, 10 );


Для xHarbour в src/vm/net.c заменяем

 цитата:
if( ! ISCHAR( 2 ) )
{
Socket->remote.sin_addr.s_addr = INADDR_ANY;
}
else
{
Socket->remote.sin_addr.s_addr = inet_addr( hb_parcx( 2 ) );
}

iListen = ISNUM( 3 ) ? hb_parni( 3 ) : 10;

на

 цитата:
if( ! ISCHAR( 3 ) )
{
Socket->remote.sin_addr.s_addr = INADDR_ANY;
}
else
{
Socket->remote.sin_addr.s_addr = inet_addr( hb_parcx( 2 ) );
}

iListen = ISNUM( 4 ) ? hb_parni( 4 ) : 10;


P.S. Сбросил bugfix в Harbour SVN

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 25
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет