Si vous envoyez un paquet UDP à un port/ip aléatoire qui n'écoute pas, python ferme le serveur qui l'a envoyé (provoquant un plantage)?L'UDP de Python se bloque lors de l'envoi vers une ip/port qui n'écoute pas
Est-ce que je fais quelque chose de mal ou est-ce un bug?
Exemple de question:
import socket
# Launch the server
try:
Sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Sock.bind(("127.0.0.1", 25565))
except:
print("Failed to launch server")
# Send a packet to a random (closed) place
# Comment out this line to prevent error
Sock.sendto(b'', ("127.0.0.1", 4623))
while True:
# Wait for data
print("Listening for data")
data, addr = Sock.recvfrom(1024)
erreur:
line 18, in data, addr = Sock.recvfrom(1024) ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
Cela l'a corrigé! Je pense que cet exemple est exactement ce qui se passe ici. Pourquoi le message ICMP inaccessible provoque-t-il l'échec? Comment puis-je écrire du code qui détecte cela (autre que try: except?) Est-ce que le seul moyen de recvfrom peut échouer? Pourquoi n'ai-je pas lu à ce sujet dans la documentation? En regardant la page wikipedia pour IMCP, il y a beaucoup de types d'erreurs. Sont-ils les mêmes en python? Désolé pour tant de questions, merci de réparer! – Andev
@Andev: répondre à toutes ces questions supplémentaires est hors contexte de l'original. Il y a plus de raisons pour lesquelles et comment recvfrom pourrait échouer, certaines d'entre elles dépendent du système d'exploitation. Je vous suggère d'étudier la documentation des fonctions natives utilisées par Pythons recvfrom, ie [recvfrom (2)] (https://linux.die.net/man/2/recvfrom), [recv (2)] (https: //linux.die.net/man/2/recv). Et à propos de tous ces trucs ICMP et similaires, vous pourriez étudier [Advanced Network Programming] (https://www.google.de/search?q=advanced+network+programming) –
Merci! Je n'ai pas encore rencontré ce site web, alors je vais jeter un oeil! – Andev