Les sockets : programmation réseau sous UNIX en C

a marqué ce sujet comme résolu.

Bonjour, :)

Je vous propose un cours touchant à la programmation réseau en C sous UNIX. C’est un domaine où il est difficile de bien faire les choses et on trouve beaucoup trop de d’informations trop superficielles et pas très modernes (les gens restent bien accrochés à leur inet_aton :p ). J’ouvre la bêta bien qu’il n’y ait pas beaucoup de contenu actuellement.

N’hésitez pas à me donner vos retours ou des suggestions sur les sujets abordés ou à aborder. ;)

+2 -0

Ca m'a l'air fort intéressant. Je t'invite à renseigner les pré-requis de ton tutoriel dans l'introduction, et même à inclure le bloc correspondant. :)

Bon courage !

Vayel

Le bloc n'est pas encore adopté (obligatoire ?), il me semble

(désolé, message automatique due à une mise à jour.)

kevin.lesenechal

C'est fait exprès, ne t'inquiète pas. À chaque fois que tu mets à jour la bêta ou même que tu la désactives/réactives, un message est posté automatiquement sur le sujet. Si tu as peur de faire des multi-post, tu peux toujours masquer tes messages avec le bouton adéquate.

Sinon, même chose que Vayel, le sujet est intéressant et bon courage !

Salut,

Je viens de regarder le chapitre trois et je suis agréablement surpris de voir un cours à jour sur le sujet qui recommande l'utilisation des bonnes fonctions. À mon sens, c'est un très bon début. :)

Il y a juste un point qui me paraît un peu contestable : c'est le passage relatif à la structure sockaddr. En effet, foncièrement, la taille du champ sa_data n'a pas d'importance, elle aurait tout aussi bien pû être de un. L'objectif ici est simplement de disposer d'un champ qui référence les données de la structure passée en argument. L'essentiel c'est que le bon type de structure soit utilisé et spécifié.

Sinon, je note juste que, sur la forme, tu utilises pas mal d'expressions anglaises qui, finalement, pourraient être traduites assez simplement comme file descriptor, protocol family, network byte order, etc. Aussi, tu es certains que le terme « agnostique » s'utilise bien dans un tel contexte ? Parce que, pour ma part, je ne l'ai jamais vu employé qu'en relation avec les questions religieuses. Ce ne serait une importation de l'anglais par hasard ?

+0 -0

Aussi, tu es certains que le terme « agnostique » s'utilise bien dans un tel contexte ? Parce que, pour ma part, je ne l'ai jamais vu employé qu'en relation avec les questions religieuses. Ce ne serait une importation de l'anglais par hasard ?

Je confirme, c’est un calque de l’anglais agnostic. Il faudrait reformuler « nous allons donc devoir être agnostique du type d’adresse manipulé » en « nous ne devrons donc faire aucune présomption quant au type d’adresses manipulé ». :)

+0 -0

@Vayel J’ai inclus le bloc sur l’intro, je m’étais un peu précipité sans me rendre compte qu’il y avait des règles de bon usage. :p Bon par contre il y a un souci avec le Markdown : les retours à la ligne ne se font pas ! Voilà mon code :

1
2
3
4
5
6
[[i]]
| **Prérequis**  
| *Langage C* : [...].
| *Programmation système UNIX* : [...].
|
| **Prérequis optionnel**

@Taurre La taille de sa_data importe comme je le mentionne car cela permet de réserver la place pour l’adresse. Voici un exemple que je donne :

1
2
3
4
5
6
7
typedef struct Client
{
  int             sockfd;  /* La socket du client */
  struct sockaddr addr;    /* Son adresse (IPv4, IPv6, ou autre) */
  socklen_t       addrlen; /* La taille de l'adresse */
  /* ... */
} Client;

À noter qu’il ne s’agit pas d’un pointeur sur sockaddr : on s’épargne une allocation dynamique coûteuse. Bien sûr j’explique un peu plus loin que cet emploi est devenu obsolète avec IPv6 : écrire sur addr via sockaddr_in6* et c’est le drame.

Concernant les emplois anglais je peux comprendre qu’ils dérangent mais je reste quelqu’un de pragmatique : ces termes me semble bien plus courants, je n’ai jamais entendu quelqu’un parler d’un « descripteur de fichier » par exemple. Cela permet également de plus facilement faire un lien avec les manuels et autres resources en ligne. J’ai réfléchirai même si je trouve les alternatives francophones peu satisfaisantes. Pour « agnostique » le terme ne se limite pas au religieux : https://fr.wiktionary.org/wiki/agnostique.

Merci à tous en tout cas pour vos encouragements. :) J’ai mis à jour le chapitre 3, il ne reste que la partie sur getaddrinfo(3) qui n’est pas complète. Je réfléchis également à une réorganisation de ce chapitre qui commence à peu à enfler mais c’est délicat : un chapitre sur getaddrinfo(3) serait trop court par exemple.

+0 -0

les retours à la ligne ne se font pas !

Il faut mettre deux espaces à la fin de la ligne, comme ceci.

1
2
Ma première ligne.  
Ma deuxième ligne.

Concernant les emplois anglais je peux comprendre qu’ils dérangent mais je reste quelqu’un de pragmatique : ces termes me semble bien plus courants, je n’ai jamais entendu quelqu’un parler d’un « descripteur de fichier » par exemple. Cela permet également de plus facilement faire un lien avec les manuels et autres resources en ligne.

Le « bon usage » veut que l’on utilise le mot français si celui-ci est un minimum courant, et que lors de sa première utilisation, on précise entre parenthèses son équivalent anglais. Par exemple, comme ceci :

Un descripteur de fichier (file descriptor en anglais) est un entier servant à identifier un fichier sur un système d’exploitation de la famille Unix.

Comment savoir si le terme français remplit les conditions lorsque l’on baigne dans l’anglais ? Un bon moyen est généralement de regarder le terme qu’a choisi Wikipédia pour ses articles. Ainsi, « descripteur de fichier » est d’usage courant, mais pas « structure logicielle » (framework). :)

Pour « agnostique » le terme ne se limite pas au religieux : https://fr.wiktionary.org/wiki/agnostique.

Tu as bien conscience que, l’exemple étant lui-même truffé de franglais, ce ne peut pas être considéré comme une preuve valable que ce terme a acquis cet emploi en français ?

+0 -0

@Taurre La taille de sa_data importe comme je le mentionne car cela permet de réserver la place pour l’adresse. Voici un exemple que je donne […].

kevin.lesenechal

Justement, à mon sens, ce n'est pas un bon exemple d'utilisation. La structure sockaddr est une sorte de « classe mère » qui n'est utilisée que pour bénéficier d'une forme de polymorphisme (d'« agnosticisme » pour reprendre tes mots). En conséquence, aucun objet hormis un pointeur ne doit être défini avec ce type.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte