J'essaie d'envoyer un message netcat
. Après l'envoi du message, netcat
doit se terminer.
J'ai essayé ce qui suit:
cat tsmmessage.bin | nc -u localhost 4300
nc -u localhost 4300 < message.bin
L' -q
option indique:
-q secondes
après EOF sur stdin, attendez le nombre de secondes spécifié, puis quittez. Si les secondes sont négatives, attendez indéfiniment.
Mais
nc -q0 -u localhost 4300 < message.bin
ne fonctionne pas non plus.
Qu'est-ce que je rate?
-q
.invalid wait-time 0
Sans le
-q
drapeau, votre instancenetcat
attendra pour toujours. Il n'y a pas de message de "fin de flux" avec UDP, donc il n'y a aucun moyennetcat
de savoir que stdin et la connexion réseau sont terminés.Par exemple, en utilisant TCP / IP, cela fonctionne comme prévu:
Mais comme vous l'avez déterminé, en utilisant UDP / IP, cela ne finit jamais:
C'est là que le
-q
drapeau entre en jeu. Mais malheureusement, il n'accepte pas une valeur de0
. Il n'accepte pas non plus les valeurs non entières. Voici la meilleure alternative que je puisse offrir sans recourstimeout
ni autre utilité externe:Même ici, il n'est pas possible de prolonger le
netcat
temps d' écoute avec élégance. (L'-w
option de délai d'attente est ignorée et-q
n'est pas pertinente.) Quelque chose comme cela pourrait être utile dans une situation pratique, de sorte que lenetcat
soit tué après 90 secondes:la source
-q 0
travaille pour moi.udp
TCP
la source
Je suis tombé dessus lorsque Google a regardé à peu près le même problème. Il s'est avéré que le problème était que netcat a été tué par bash juste après que toutes les données ont été aspirées, sans avoir la moindre chance de recevoir la réponse.
Ma solution à cela a été d'ajouter un peu de retard après avoir canalisé les données, comme ceci:
Avec un fichier, cela peut ressembler à:
la source
netcat
ne ferme toujours pas à lasleep
fin. Je m'attendrais à ce que la première ligne de commande revienne à l'invite après 1 seconde, mais ce n'est pas le cas.-q 1
? c'est à dire(echo INFO; sleep 1) | nc -q 1 redis.service.consul 6379
?-q
tout fonctionne, même l'exemple de ma question d'origine. Je suis passé à une version plus récente d'Ubuntu depuis lors, peut-être que cela cause la différence.