Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sockets UDP et fiabilité

11 réponses
Avatar
Pierre Habouzit
Il est bien connu que les sockets UDP ne sont pas fiables sur un brin
physique. Mais je me demandais ce qu'il en était de sockets UDP sur le
loopback. Est il possible sur certains Unix (et sur linux/*bsd en
particulier) de perdre des paquets UDP ?

Ou bien est ce que comme le bon sens le suppose les sockets UDP sur
localhost sont fiables ?

le but est d'éviter d'avoir à créer une socket unix avec les désagréables
besoin de lancer le programme en root si on veut avoir la socket
dans /var/run/$(myprog).sock. surtout pour "jouer" un protocole où il y a
un envoi puis une réception de message, c'est un peu exagéré de sortir un
mode connecté pour ca.
--
·O· Pierre Habouzit
··O madcoder@debian.org
OOO http://www.madism.org

10 réponses

1 2
Avatar
Bob qui Trolle
Pierre Habouzit wrote:

pour "jouer" un protocole où il y a
un envoi puis une réception de message, c'est un peu exagéré de sortir un
mode connecté pour ca.


Ceci dit, il est très rapide.

--
Oups....

Avatar
Nicolas George
Pierre Habouzit wrote in message
<43822fac$0$4304$:
le but est d'éviter d'avoir à créer une socket unix avec les désagréables
besoin de lancer le programme en root si on veut avoir la socket
dans /var/run/$(myprog).sock.


Il suffit de ne pas mettre la socket dans ce répertoire-là.

Avatar
Pierre Habouzit
Nicolas George wrote:

Pierre Habouzit wrote in message
<43822fac$0$4304$:
le but est d'éviter d'avoir à créer une socket unix avec les désagréables
besoin de lancer le programme en root si on veut avoir la socket
dans /var/run/$(myprog).sock.


Il suffit de ne pas mettre la socket dans ce répertoire-là.


Ce qui demande alors (au choix) :
(1) d'avoir un utilisateur dévolu au démon en question. Ce qui est pénible.
(2) de mettre la socket dans /tmp. Ce qui est moche.

--
·O· Pierre Habouzit
··O
OOO http://www.madism.org


Avatar
Stephane Chazelas
2005-11-21, 23:11(+01), Pierre Habouzit:
Nicolas George wrote:

Pierre Habouzit wrote in message
<43822fac$0$4304$:
le but est d'éviter d'avoir à créer une socket unix avec les désagréables
besoin de lancer le programme en root si on veut avoir la socket
dans /var/run/$(myprog).sock.


Il suffit de ne pas mettre la socket dans ce répertoire-là.


Ce qui demande alors (au choix) :
(1) d'avoir un utilisateur dévolu au démon en question. Ce qui est pénible.
(2) de mettre la socket dans /tmp. Ce qui est moche.


Pourquoi? Il me semble que /tmp est tout indiqué pour des trucs
temporaires

Et ~/.myprog.sock ou ~/.myprog/sock pour un truc lancé par un
utilisateur pour un utilisateur.

--
Stéphane



Avatar
Pierre Habouzit
Stephane Chazelas wrote:

2005-11-21, 23:11(+01), Pierre Habouzit:
Nicolas George wrote:

Pierre Habouzit wrote in message
<43822fac$0$4304$:
le but est d'éviter d'avoir à créer une socket unix avec les
désagréables besoin de lancer le programme en root si on veut avoir la
socket dans /var/run/$(myprog).sock.


Il suffit de ne pas mettre la socket dans ce répertoire-là.


Ce qui demande alors (au choix) :
(1) d'avoir un utilisateur dévolu au démon en question. Ce qui est
pénible. (2) de mettre la socket dans /tmp. Ce qui est moche.


Pourquoi? Il me semble que /tmp est tout indiqué pour des trucs
temporaires

Et ~/.myprog.sock ou ~/.myprog/sock pour un truc lancé par un
utilisateur pour un utilisateur.


qui a dit que je vais faire un programme utilisateur ? ou temporaire ? le
but est d'écrire un démon qui va servir dans une queue de mail.
--
·O· Pierre Habouzit
··O
OOO http://www.madism.org




Avatar
TiChou
Dans le message <news:4382e402$0$21683$,
*Pierre Habouzit* tapota sur f.c.o.unix :

Stephane Chazelas wrote:

Nicolas George wrote:
socket dans /var/run/$(myprog).sock.
Il suffit de ne pas mettre la socket dans ce répertoire-là.






Par exemple /var/run/myprog/myprog.sock, comme c'est le cas de plusieurs
services tournant sous un uid différent de 0 comme par exemple mysqld.

Ce qui demande alors (au choix) :
(1) d'avoir un utilisateur dévolu au démon en question. Ce qui est
pénible.
(2) de mettre la socket dans /tmp. Ce qui est moche.


Pourquoi? Il me semble que /tmp est tout indiqué pour des trucs
temporaires



Oui, si aucun répertoire de travail n'est disponible pour le programme en
question, pourquoi est-ce moche de se placer dans /tmp ? Vous n'avez pas
répondu.

Et ~/.myprog.sock ou ~/.myprog/sock pour un truc lancé par un
utilisateur pour un utilisateur.


qui a dit que je vais faire un programme utilisateur ?


Un programme tourne forcément sous un uid auquel lui est en principe associé
un nom d'utilisateur et donc un répertoire de travail.
Donc je m'interroge : pourquoi la solution du ~/.myprog.sock ne
conviendrait-elle pas ?

le but est d'écrire un démon qui va servir dans une queue de mail.


Donc avec un uid fixe, non ? Si oui, là pareil, pourquoi la solution du
/var/{lib,run}/daemon/daemon.sock ne convient pas ?

Sinon, si le programme est amené à être lancé sous différents uid et donc
poser des problèmes de permissions, n'est-il pas au moins possible qu'il
soit lancé avec le même gid ?

--
TiChou





Avatar
Pierre Habouzit
Par exemple /var/run/myprog/myprog.sock, comme c'est le cas de plusieurs
services tournant sous un uid différent de 0 comme par exemple mysqld.


ce qui demande soit de préinstaller un répertoire avec les bons droits sur
myprog, soit que le programme soit lancé en root pour créer sa socket.

Ce qui demande alors (au choix) :
(1) d'avoir un utilisateur dévolu au démon en question. Ce qui est
pénible.
(2) de mettre la socket dans /tmp. Ce qui est moche.


Pourquoi? Il me semble que /tmp est tout indiqué pour des trucs
temporaires



Oui, si aucun répertoire de travail n'est disponible pour le programme en
question, pourquoi est-ce moche de se placer dans /tmp ? Vous n'avez pas
répondu.


parce que tmp peut être plein (l'antivirus qui fait n'importe quoi par
exemple, c'est du vécu) et que donc à cause de ca le démon peut ne pas se
relancer. Sans parler du nombre impressionnant d'attaques qui existent pour
DDoSer des systemes en remplissant leur /tmp.

Et ~/.myprog.sock ou ~/.myprog/sock pour un truc lancé par un
utilisateur pour un utilisateur.


qui a dit que je vais faire un programme utilisateur ?


Un programme tourne forcément sous un uid auquel lui est en principe
associé un nom d'utilisateur et donc un répertoire de travail.
Donc je m'interroge : pourquoi la solution du ~/.myprog.sock ne
conviendrait-elle pas ?


faux. les répertoires de travails n'existent pas toujours. Surtout pour un
démon qui tourne en nobody/nogroup, sur ma debian, nobody a /nonexistent
comme home dir.. je vais aller loin si je met quoi que ce soit dans
~/.myprog.sock ;)

le but est d'écrire un démon qui va servir dans une queue de mail.


Donc avec un uid fixe, non ? Si oui, là pareil, pourquoi la solution du
/var/{lib,run}/daemon/daemon.sock ne convient pas ?


parce que je préfèrerais un petit démon dont l'install se réduit à le
lancer.

Je trouve particulièrement désagréable que l'écriture du moindre démon
demande d'avoir au préalable des installations dans /var/run, avec les bons
droits, etc etc.

J'aimerais me limiter au strict minimum : un script d'init, un fichier de
conf dans /etc et un démon dans /usr/sbin. Le reste ne fait qu'augmenter
les chances de voir le démon planter pour des raisons stupides. C'est un
démon qui va être un passage obligé de la chaine de mail, et qui donc ne
peut pas se permettre de dépendre de trop de paramètres externes.

Mais bon, je pense que je vais me débrouiller sur ce truc.
--
·O· Pierre Habouzit
··O
OOO http://www.madism.org




Avatar
Bob qui Trolle
Pierre Habouzit wrote:
Nicolas George wrote:


Ce qui demande alors (au choix) :
(1) d'avoir un utilisateur dévolu au démon en question. Ce qui est pénible.
(2) de mettre la socket dans /tmp. Ce qui est moche.


à mon avis, la bonne grille de lecture est de se dire que :

- Si tu dois créer des soquettes unix, il faut les mettre là où tu
estimes qu'il faut créer tes fichiers temporaires.
- Si tu n'as pas vocation à créer de fichiers temporaires, alors, soi t
tu dois créer un répertoire ad-hoc (/var/spool....), soit il faut te
passer de soquettes unix.
- Si tu n'as pas vocation à créer de soquettes Unix et qu'IPC n'est p as
un choix envisageable, tu dois inventer quelque chose si tu ne veux pas
dépendre d'un protocole de communication entre systèmes non
nécessairement présent sauf contraintes spécifiques à ton cas par ticulier.

Wenema s'était, en son temps, posé ce problème : lire sa réflexio n et
ses conclusions peut toujours être utile :
http://www.postfix.org/OVERVIEW.html

Avatar
DINH Viêt Hoà

Il est bien connu que les sockets UDP ne sont pas fiables sur un brin
physique. Mais je me demandais ce qu'il en était de sockets UDP sur le
loopback. Est il possible sur certains Unix (et sur linux/*bsd en
particulier) de perdre des paquets UDP ?

Ou bien est ce que comme le bon sens le suppose les sockets UDP sur
localhost sont fiables ?


non : s'il y a un surplus de paquets en attente, ils seront rejetés.

le but est d'éviter d'avoir à créer une socket unix avec les désagréables
besoin de lancer le programme en root si on veut avoir la socket
dans /var/run/$(myprog).sock.


Si tu es maître de la machine et du programme, pourquoi ne donnes-tu pas
les autorisations à ton programme sur /var/run/[bidule] ?

surtout pour "jouer" un protocole où il y a
un envoi puis une réception de message, c'est un peu exagéré de sortir un
mode connecté pour ca.


En fait, la majorités des protocoles font un envoi puis réception de
message.

--
DINH V. Hoa,

"Paraît-il que c'est ce que recherchent la majorité des djeunz. Il n'y a plus
aucun attrait pour les métiers scientifiques ni techniques. Ils veulent être
chanteur, acteur ou fonctionnaire. C'est désépérant..." -- Emmanuel Delahaye

Avatar
Thierry Boudet
On 2005-11-23, DINH Viêt Hoà wrote:

Ou bien est ce que comme le bon sens le suppose les sockets UDP sur
localhost sont fiables ?


non : s'il y a un surplus de paquets en attente, ils seront rejetés.



Euh, rejetes, ou silencieusement perdus ?


--
Want to see nacked teens offline? http://www.w3schools.com/downloadwww.htm


1 2