OVH Cloud OVH Cloud

qqn qui s'y connait en c et en reseau svp ?

8 réponses
Avatar
Thomas
bonjour :-)

est ce que par hasard il passerait par ici qqn qui s'y connait en c et
en reseau,
et qui pourrait m'assurer que inet_addr fonctionne correctement sur mac
os x, svp ?
(soit en ayant qq minutes de libres, soit en ayant deja programmé
suffisamment sur mac os x pour pouvoir le dire sans rien faire)


pour info, adasockets ( http://www.rfc1149.net/devel/adasockets ) ne
marche pas correctement chez moi :
thomas% ./value 192.168.1.4
0.0.158.248
thomas%
par exemple

ca me permettrait de dire à ceux qui s'y connaissent en ada de se
concentrer sur l'ada pur et sur la conversion ada/c, sachant que le c
pur marcherais correctement

--
Mon CV : http://tDeContes.hd.free.fr/divers/emploi/
http://palestine-hn.org/
http://www.aapel.org/bdp/BLpas_concerne.html

"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"

8 réponses

Avatar
Eric Levenez
Le 17/07/06 16:14, dans
,
« Thomas » a écrit :

est ce que par hasard il passerait par ici qqn qui s'y connait en c et
en reseau,
et qui pourrait m'assurer que inet_addr fonctionne correctement sur mac
os x, svp ?


Oui, cela marche sans aucun problème.

(soit en ayant qq minutes de libres, soit en ayant deja programmé
suffisamment sur mac os x pour pouvoir le dire sans rien faire)


Je viens de vérifier sur un petit programme.

pour info, adasockets ( http://www.rfc1149.net/devel/adasockets ) ne
marche pas correctement chez moi :


Quelle rapport entre une adresse URL et la fonction C inet_addr ?

thomas% ./value 192.168.1.4
0.0.158.248
thomas%
par exemple


Chez moi, cela marche :

MAC5:~/tmp eric$ ./value 192.168.1.4
192.168.1.4
MAC5:~/tmp eric$

Montre ton code pour voir l'erreur que tu as commise.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Avatar
Thomas
In article (Dans l'article) <C0E173E8.6C259%,
Eric Levenez wrote (écrivait) :

Le 17/07/06 16:14, dans
,
« Thomas » a écrit :

est ce que par hasard il passerait par ici qqn qui s'y connait en c et
en reseau,
et qui pourrait m'assurer que inet_addr fonctionne correctement sur mac
os x, svp ?


Oui, cela marche sans aucun problème.

(soit en ayant qq minutes de libres, soit en ayant deja programmé
suffisamment sur mac os x pour pouvoir le dire sans rien faire)


Je viens de vérifier sur un petit programme.


merci bcp :-)


pour info, adasockets ( http://www.rfc1149.net/devel/adasockets ) ne
marche pas correctement chez moi :


Quelle rapport entre une adresse URL et la fonction C inet_addr ?


hein ? ben t'as bien compris que je parlais d'adasockets, dont j'ai
donné l'url, non ?
(c'est adasockets qui marche pas, pas l'url)


thomas% ./value 192.168.1.4
0.0.158.248
thomas%
par exemple


Chez moi, cela marche :

MAC5:~/tmp eric$ ./value 192.168.1.4
192.168.1.4
MAC5:~/tmp eric$


merci :-)


Montre ton code pour voir l'erreur que tu as commise.


ah mais j'ai encore rien ecrit ! c'est les exemples fournis qui ne
marchent pas :-(
t'as vu pour value, ben pour les autres le client n'arrive pas à trouver
le serveur, tout simplement ...


t'es bien sous mac os x ?
quel compilateur utilises tu ? moi j'utilise celui là :
<http://www.macada.org/Downloads/Compiler/gcc-4.0-gnat-10.4.1-20050625-dy
namic.tgz>

--
Mon CV : http://tDeContes.hd.free.fr/divers/emploi/
http://palestine-hn.org/
http://www.aapel.org/bdp/BLpas_concerne.html

"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"


Avatar
Eric Levenez
Le 18/07/06 5:36, dans
,
« Thomas » a écrit :

In article (Dans l'article) <C0E173E8.6C259%,
Eric Levenez wrote (écrivait) :

Le 17/07/06 16:14, dans
,
« Thomas » a écrit :

pour info, adasockets ( http://www.rfc1149.net/devel/adasockets ) ne
marche pas correctement chez moi :


Quelle rapport entre une adresse URL et la fonction C inet_addr ?


hein ? ben t'as bien compris que je parlais d'adasockets, dont j'ai
donné l'url, non ?


Non. Je n'avais pas compris vu que du demandais l'aide sur la fonction C
inet_addr.

(c'est adasockets qui marche pas, pas l'url)


Disons que le serveur compresse avec gzip la page web, que Safari n'arrive
pas à afficher cette page et que je ne sois pas sûr que cette façon de faire
soit totalement normalisée, même si Firefox marche. Mais c'est aussi
peut-être une volonté des auteurs de vouloir avoir une page web
confidentielle.

ah mais j'ai encore rien ecrit ! c'est les exemples fournis qui ne
marchent pas :-(


Si tu poses une questions sur une fonction C et si tu la testes avec un
programme ADA, c'est normal que quand ça ne marche pas on ne sache pas dire
d'où vient l'erreur.

t'as vu pour value,


Le programme "value" que j'ai utilisé est mon "value" codé en C et en
fonction de mes spécifications, c'est-à-dire utilisation de inet_addr et
affichage des 4 octets de in_addr_t.

ben pour les autres le client n'arrive pas à trouver
le serveur, tout simplement ...


Trouver un serveur ? Mais de quoi parles-tu donc ? La fonction inet_addr
sert à convertir une adresse point en entier in_addr_t. Une adresse point
est du type "1.23.45.12". En aucun cas cette fonction ne sert à résoudre une
adresse donnée sous forme de nom. Utilise pour cela une fonction du type
gethostbyname (là encore je te parles C, pas ADA).

t'es bien sous mac os x ?


Je suis sur Mac OS X 10.4.7

quel compilateur utilises tu ?


gcc version 4.0.1 (Apple Computer, Inc. build 5341)

moi j'utilise celui là :
<http://www.macada.org/Downloads/Compiler/gcc-4.0-gnat-10.4.1-20050625-dy
namic.tgz>


Je ne compile pas sous ADA, mais en C standard C99.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.



Avatar
Thomas
In article (Dans l'article) <C0E2642F.6C3F1%,
Eric Levenez wrote (écrivait) :

Le 18/07/06 5:36, dans
,
« Thomas » a écrit :

In article (Dans l'article) <C0E173E8.6C259%,
Eric Levenez wrote (écrivait) :

Le 17/07/06 16:14, dans
,
« Thomas » a écrit :

pour info, adasockets ( http://www.rfc1149.net/devel/adasockets ) ne
marche pas correctement chez moi :


Quelle rapport entre une adresse URL et la fonction C inet_addr ?


hein ? ben t'as bien compris que je parlais d'adasockets, dont j'ai
donné l'url, non ?


Non. Je n'avais pas compris vu que du demandais l'aide sur la fonction C
inet_addr.


ah d'ac, bon ben le lien entre l'url et inet_addr, c'est adasockets,
dont j'ai donné l'url, et *qui utilise* inet_addr :-)


(c'est adasockets qui marche pas, pas l'url)


Disons que le serveur compresse avec gzip la page web, que Safari n'arrive
pas à afficher cette page et que je ne sois pas sûr que cette façon de faire
soit totalement normalisée, même si Firefox marche. Mais c'est aussi
peut-être une volonté des auteurs de vouloir avoir une page web
confidentielle.


je suis pas au courant de cette techno/norme web (j'ai pas safari, avec
icab ca marche)


ah mais j'ai encore rien ecrit ! c'est les exemples fournis qui ne
marchent pas :-(


Si tu poses une questions sur une fonction C et si tu la testes avec un
programme ADA,


c'est pas vraiment un test, je souhaite l'utiliser :-)
(je sais pas programmer en c)

c'est normal que quand ça ne marche pas on ne sache pas dire
d'où vient l'erreur.


grace à toi je sais en partie d'où elle ne viens pas :-)


t'as vu pour value,


Le programme "value" que j'ai utilisé est mon "value" codé en C et en
fonction de mes spécifications, c'est-à-dire utilisation de inet_addr et
affichage des 4 octets de in_addr_t.


merci :-) doncc on est sur que ca marche correctement :-)
tiens d'ailleurs, pourrais tu me filer le code, que je verifie que ca
marche pareil avec mon compilateur stp, vu qu'on n'a pas le meme ?

le miens viens de adasockets (si tu veux voir le code source il suffit
de le telecharger, c'est dans les dossiers examples et src)


ben pour les autres le client n'arrive pas à trouver
le serveur, tout simplement ...



les autres exemples sont mini client, mini serveur, mini relais, ...


Trouver un serveur ? Mais de quoi parles-tu donc ?


ben je dit à l'exemple client de se connecter à une ip et il trouve pas,
alors que dessus l'exemple serveur est lancé et que le client telnet
trouve ...
curieusement, quand je lui donne un nom, il trouve !


t'es bien sous mac os x ?


Je suis sur Mac OS X 10.4.7

quel compilateur utilises tu ?


gcc version 4.0.1 (Apple Computer, Inc. build 5341)

moi j'utilise celui là :
<http://www.macada.org/Downloads/Compiler/gcc-4.0-gnat-10.4.1-20050625-dy
namic.tgz>


Je ne compile pas sous ADA, mais en C standard C99.


ok :-)

merci pour ton aide :-)

--
Mon CV : http://tDeContes.hd.free.fr/divers/emploi/
http://palestine-hn.org/
http://www.aapel.org/bdp/BLpas_concerne.html

"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"




Avatar
Eric Levenez
Le 18/07/06 14:17, dans
,
« Thomas » a écrit :

In article (Dans l'article) <C0E2642F.6C3F1%,
Eric Levenez wrote (écrivait) :

Disons que le serveur compresse avec gzip la page web, que Safari n'arrive
pas à afficher cette page et que je ne sois pas sûr que cette façon de faire
soit totalement normalisée, même si Firefox marche. Mais c'est aussi
peut-être une volonté des auteurs de vouloir avoir une page web
confidentielle.


je suis pas au courant de cette techno/norme web (j'ai pas safari, avec
icab ca marche)


Ce n'est pas parce que cela marche sur certains browsers que cela a été
normalisé par l'IETF. Voire tous les sites qui ne marchent que sur Microsoft
Internet Explorer et qui pensent qu'ils sont bien programmés...

Le programme "value" que j'ai utilisé est mon "value" codé en C et en
fonction de mes spécifications, c'est-à-dire utilisation de inet_addr et
affichage des 4 octets de in_addr_t.


merci :-) doncc on est sur que ca marche correctement :-)
tiens d'ailleurs, pourrais tu me filer le code, que je verifie que ca
marche pareil avec mon compilateur stp, vu qu'on n'a pas le meme ?


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

int main(int argc, char **argv)
{
while (*++argv) {
in_addr_t a = inet_addr(*argv);
printf("%u.%u.%u.%un", (a>>24)&255, (a>>16)&255,
(a>>8)&255, a&255);
}
return 0;
}

le miens viens de adasockets (si tu veux voir le code source il suffit
de le telecharger, c'est dans les dossiers examples et src)


Je ne connais pas ADA (enfin juste lu un ou 2 bouquins dessus), alors je ne
comprends pas la ligne et son rapport avec la fonction C inet_addr :

Put_Line (Image (Value (Argument (1))));

Je n'ai pas aussi trop envie de débugger une bibliothèque ADA (en plus
publiée sur un site web pas trop conforme) :

<http://validator.w3.org/check?uri=http%3A%2F%2Fwww.rfc1149.net%2Fdevel%2Fad
asockets>

:-)

ben je dit à l'exemple client de se connecter à une ip et il trouve pas,
alors que dessus l'exemple serveur est lancé et que le client telnet
trouve ...
curieusement, quand je lui donne un nom, il trouve !


Tu devrais poster ce genre de question sur un groupe ou sur un site web
parlant ADA, parce que là le problème est clairement un problème ADA et plus
particulièrement un problème de bibliothèque ADA.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.


Avatar
Thomas
In article (Dans l'article) <C0E2ACFF.6C47A%,
Eric Levenez wrote (écrivait) :

Le 18/07/06 14:17, dans
,
« Thomas » a écrit :

In article (Dans l'article) <C0E2642F.6C3F1%,
Eric Levenez wrote (écrivait) :

Disons que le serveur compresse avec gzip la page web, que Safari n'arrive
pas à afficher cette page et que je ne sois pas sûr que cette façon de
faire
soit totalement normalisée, même si Firefox marche. Mais c'est aussi
peut-être une volonté des auteurs de vouloir avoir une page web
confidentielle.


je suis pas au courant de cette techno/norme web (j'ai pas safari, avec
icab ca marche)


Ce n'est pas parce que cela marche sur certains browsers que cela a été
normalisé par l'IETF. Voire tous les sites qui ne marchent que sur Microsoft
Internet Explorer et qui pensent qu'ils sont bien programmés...


ok (mais c'est pas moi l'auteur ...)


Le programme "value" que j'ai utilisé est mon "value" codé en C et en
fonction de mes spécifications, c'est-à-dire utilisation de inet_addr et
affichage des 4 octets de in_addr_t.


merci :-) doncc on est sur que ca marche correctement :-)
tiens d'ailleurs, pourrais tu me filer le code, que je verifie que ca
marche pareil avec mon compilateur stp, vu qu'on n'a pas le meme ?


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

int main(int argc, char **argv)
{
while (*++argv) {
in_addr_t a = inet_addr(*argv);
printf("%u.%u.%u.%un", (a>>24)&255, (a>>16)&255,
(a>>8)&255, a&255);
}
return 0;
}


bon, ca marche aussi chez moi, le pb est donc ailleurs ...
merci :-)



le miens viens de adasockets (si tu veux voir le code source il suffit
de le telecharger, c'est dans les dossiers examples et src)


Je ne connais pas ADA (enfin juste lu un ou 2 bouquins dessus), alors je ne
comprends pas la ligne et son rapport avec la fonction C inet_addr :

Put_Line (Image (Value (Argument (1))));


pour info :
sockets-naming.ads
sockets-naming.adb
sockets-thin.ads


type Address is record
H1, H2, H3, H4 : Address_Component;
end record;


function Image (Add : Address) return String
is

function Image (A : Address_Component)
return String
is
Im : constant String := Address_Component'Image (A);
begin
return Im (Im'First + 1 .. Im'Last);
end Image;
-- Return the string corresponding to its argument without
-- the leading space.

begin
return Image (Add.H1) & "." & Image (Add.H2) & "." &
Image (Add.H3) & "." & Image (Add.H4);
end Image;


function Value (Add : String) return Address is
begin
if not Is_IP_Address (Add) then
Ada.Exceptions.Raise_Exception (Naming_Error'Identity,
Add & " is not an IP address");
end if;
declare
C_Add : chars_ptr := New_String (Add);
Converted : constant In_Addr := C_Inet_Addr (C_Add); -- convertion
begin
Free (C_Add);
return (H1 => Address_Component (Converted.S_B1),
H2 => Address_Component (Converted.S_B2),
H3 => Address_Component (Converted.S_B3),
H4 => Address_Component (Converted.S_B4));
end;
end Value;


function C_Inet_Addr
(Cp : Strings.chars_ptr)
return Types.In_Addr;

pragma Import (C, C_Inet_Addr, "inet_addr");



ben je dit à l'exemple client de se connecter à une ip et il trouve pas,
alors que dessus l'exemple serveur est lancé et que le client telnet
trouve ...
curieusement, quand je lui donne un nom, il trouve !


Tu devrais poster ce genre de question sur un groupe ou sur un site web
parlant ADA, parce que là le problème est clairement un problème ADA et plus
particulièrement un problème de bibliothèque ADA.


oui oui, je voulais m'assurer que c'etait pas plus "profond" dans les
bibliotheques ou le systeme :-)

--
Mon CV : http://tDeContes.hd.free.fr/divers/emploi/
http://palestine-hn.org/
http://www.aapel.org/bdp/BLpas_concerne.html

"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"



Avatar
root
Le Fri, 18 Aug 2006 15:34:31 +0200, Thomas a écrit :

In article (Dans l'article) <C0E2ACFF.6C47A%,

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

int main(int argc, char **argv)
{
while (*++argv) {
in_addr_t a = inet_addr(*argv);
printf("%u.%u.%u.%un", (a>>24)&255, (a>>16)&255,
(a>>8)&255, a&255);
}
return 0;
}


bon, ca marche aussi chez moi, le pb est donc ailleurs ...
merci :-)



Par hazard, il n'y aurait pas un pb de "byte ordering" dans ton code ?
inet_addr retourne la valeur en "network byte ordering" qui peut être
différent du "host byte ordering" quand tu manipules celle-ci.

Sur mon MacBook Intel en tout cas, ça inverse l'adresse IP que je lui
fournis...

$ ./test 1.2.3.4
4.3.2.1

Si c'est le comportement voulu, alors j'ai rien dit :) sinon, utiliser
ntohl()/htonl()


Avatar
Eric Levenez
Le 18/08/06 16:30, dans
, « root »
a écrit :

Le Fri, 18 Aug 2006 15:34:31 +0200, Thomas a écrit :

In article (Dans l'article) <C0E2ACFF.6C47A%,

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

int main(int argc, char **argv)
{
while (*++argv) {
in_addr_t a = inet_addr(*argv);
printf("%u.%u.%u.%un", (a>>24)&255, (a>>16)&255,
(a>>8)&255, a&255);
}
return 0;
}


bon, ca marche aussi chez moi, le pb est donc ailleurs ...
merci :-)



Par hazard, il n'y aurait pas un pb de "byte ordering" dans ton code ?


Oui. Étant donné que le programme d'origine était en ADA et que je n'avais
de spécifications de ce qu'était sensé faire le programme "value", j'ai fait
au plus simple: afficher les 4 octets de l'adresse IPV4 en décimal.

inet_addr retourne la valeur en "network byte ordering" qui peut être
différent du "host byte ordering" quand tu manipules celle-ci.


Oui, bien sûr.

Sur mon MacBook Intel en tout cas, ça inverse l'adresse IP que je lui
fournis...

$ ./test 1.2.3.4
4.3.2.1

Si c'est le comportement voulu, alors j'ai rien dit :) sinon, utiliser
ntohl()/htonl()


Oui. Mais le problème était que le programme ADA affiche "0.0.158.248" au
lieu de "192.168.1.4", et cela ne vient pas d'une ordre des octets.
Maintenant on a le code ADA, alors ceux qui connaissent ce langage peuvent
regarder (bien que ce groupe ne soit pas du tout adapté à cette question).

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.