Signal Linux SIGPIPE

Feb 19, 2024 pm 04:00 PM
tcp 信道 sigpipe

Dans les parties de communication TCP, pour faciliter la description, les parties de communication sont remplacées par A et B ci-dessous.

Selon le protocole TCP, si B continue d'envoyer des données après que A ait fermé la connexion, B recevra la réponse RST de A. Si B continue d'envoyer des données, le système enverra un signal SIGPIPE pour informer que la connexion a été déconnectée et arrêtera l'envoi.

Le comportement de traitement par défaut du système pour le signal SIGPIPE est de laisser le processus B se terminer.

Le comportement de traitement par défaut du système d'exploitation pour le signal SIGPIPE est très hostile, analysons-le.

Linux SIGPIPE信号

La communication TCP est un canal full-duplex, ce qui équivaut à deux canaux simplex, et chaque extrémité de la connexion en est responsable.

Lorsque le homologue "ferme", bien que l'intention soit de fermer les deux canaux dans leur intégralité, l'extrémité locale ne reçoit que le paquet FIN.

Selon les dispositions du protocole TCP, lorsqu'une extrémité ferme le canal unidirectionnel dont elle est responsable, elle peut toujours recevoir des données mais ne plus en envoyer.

En d'autres termes, en raison des limitations du protocole TCP, la partie communicante ne peut pas savoir si le socket du homologue a appelé close ou shutdown.

int shutdown(int socket, int how);
Copier après la connexion

Le paramètre "comment" de la fonction d'arrêt peut être réglé pour fermer SHUT_RD, SHUT_WR ou SHUT_RDWR, qui est utilisé pour indiquer la fermeture des canaux de réception et d'envoi individuellement ou la fermeture des canaux d'envoi et de réception en même temps.

Appelez la méthode read/recv sur un socket qui a reçu un paquet FIN Si le tampon de réception est vide, 0 sera renvoyé, ce qui est souvent considéré comme indiquant que la connexion est fermée. Cependant, lorsque la méthode d'écriture/envoi est appelée pour la première fois, s'il n'y a pas de problème avec le tampon d'envoi, une écriture correcte sera renvoyée (c'est-à-dire que la valeur de retour de la fonction d'écriture/envoi est supérieure à 0) , mais le message envoyé amènera l'homologue à répondre avec un message RST. Parce que la dernière fois que le programme a appelé write/send, c'était normal. Lors d'une nouvelle tentative d'appel de la fonction write/send, le signal SIGPIPE a été généré, provoquant la sortie du processus.

Ce comportement par défaut nous permet de développer des programmes, en particulier pour les services back-end, qui doivent servir plusieurs clients en même temps. L'ensemble du processus ne peut pas se terminer et ne peut pas continuer à servir d'autres clients car il y a un problème de connexion. un certain client.

Afin d'éviter ce phénomène, vous pouvez capter le signal SIGPIPE et le traiter ou ignorer le signal. Le code pour ignorer le signal est le suivant :

signal(SIGPIPE, SIG_IGN);
Copier après la connexion

Après un réglage comme celui-ci, lorsque la méthode write/send est appelée pour la deuxième fois, -1 sera renvoyé et le code d'erreur errno sera défini sur SIGPIPE, afin que le programme sache que le homologue a été fermé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment réinitialiser le protocole TCP/IP dans Win10 ? Comment réinitialiser la pile de protocole TCP/IP dans Windows 10 Comment réinitialiser le protocole TCP/IP dans Win10 ? Comment réinitialiser la pile de protocole TCP/IP dans Windows 10 Mar 16, 2024 am 11:07 AM

Comment réinitialiser le protocole TCP/IP dans Win10 ? En fait, la méthode est très simple. Les utilisateurs peuvent entrer directement dans l'invite de commande, puis appuyer sur la combinaison de touches ctrl+shift+enter pour effectuer l'opération, ou exécuter directement la commande de réinitialisation pour configurer. aux utilisateurs une introduction détaillée sur la façon de réinitialiser la pile de protocoles TCP/IP dans Windows 10. Méthode 1 pour réinitialiser la pile de protocole TCP/IP dans Windows 10. Autorisations d'administrateur 1. Nous utilisons la touche de raccourci win+R pour ouvrir directement la fenêtre d'exécution, puis saisissons cmd et maintenons la combinaison de touches ctrl+shift+enter enfoncée. 2. Ou nous pouvons rechercher directement l’invite de commande dans le menu Démarrer et cliquer avec le bouton droit

Comment utiliser TCP pour implémenter une conversation entre client et serveur en python Comment utiliser TCP pour implémenter une conversation entre client et serveur en python May 17, 2023 pm 03:40 PM

Client TCP Un exemple de code client qui utilise le protocole TCP pour établir un dialogue continu : importationsocket#Configuration du client HOST='localhost'PORT=12345#Créez un socket TCP et connectez-vous au serveur client_socket=socket.socket(socket.AF_INET,socket . SOCK_STREAM)client_socket.connect((HOST,PORT))whileTrue:#Get user input message=input("Veuillez saisir le message à envoyer :&

Utilisation de Netty4 pour la communication TCP dans le développement d'API Java Utilisation de Netty4 pour la communication TCP dans le développement d'API Java Jun 17, 2023 pm 11:18 PM

TCP est un type de protocole de communication sur réseau informatique et un protocole de transmission orienté connexion. Dans le développement d'applications Java, la communication TCP est largement utilisée dans divers scénarios, tels que la transmission de données entre client et serveur, la transmission audio et vidéo en temps réel, etc. Netty4 est un cadre de programmation réseau hautes performances, hautement évolutif et performant qui peut optimiser le processus d'échange de données entre le serveur et le client pour le rendre plus efficace et fiable. Les étapes de mise en œuvre spécifiques de l'utilisation de Netty4 pour la communication TCP sont les suivantes : Introduction

À bientôt! TCP fait deux vagues, l'avez-vous vu ? Et les quatre poignées de main ? À bientôt! TCP fait deux vagues, l'avez-vous vu ? Et les quatre poignées de main ? Jul 24, 2023 pm 05:18 PM

Le « orienté connexion » mentionné ici signifie que vous devez établir une connexion, utiliser la connexion et libérer la connexion. L'établissement d'une connexion fait référence à la célèbre négociation à trois voies TCP. Lors de l'utilisation d'une connexion, les données sont transmises sous la forme d'un envoi et d'une confirmation. Il y a aussi la libération de la connexion, qui est notre TCP commun à quatre ondes.

Signal Linux SIGPIPE Signal Linux SIGPIPE Feb 19, 2024 pm 04:00 PM

Parmi les parties à la communication TCP, pour faciliter la description, les parties à la communication sont remplacées par A et B dans ce qui suit. Selon le protocole TCP, si B continue d'envoyer des données après que A ait fermé la connexion, B recevra la réponse RST de A. Si B continue d'envoyer des données, le système enverra un signal SIGPIPE pour informer que la connexion a été déconnectée et arrêtera l'envoi. Le comportement de traitement par défaut du système pour le signal SIGPIPE est de laisser le processus B se terminer. Le comportement de traitement par défaut du système d'exploitation pour le signal SIGPIPE est très hostile. Analysons-le. La communication TCP est un canal full-duplex, qui équivaut à deux canaux simplex, et chaque extrémité de la connexion en est responsable. Lorsque l'extrémité opposée « se ferme », bien que l'intention soit de fermer les deux canaux dans leur intégralité, l'extrémité locale ne reçoit que le paquet FIN. Selon les dispositions du protocole TCP, lorsqu'un

Comment envoyer plusieurs fichiers en utilisant une seule connexion TCP en Java ? Comment envoyer plusieurs fichiers en utilisant une seule connexion TCP en Java ? Apr 27, 2023 am 08:49 AM

Pourquoi existe-t-il ce blog sur l'utilisation d'une seule connexion TCP pour envoyer plusieurs fichiers ? J'ai lu récemment des choses connexes. Il n'y a aucun problème à simplement utiliser Socket pour la programmation, mais cela n'établit que quelques concepts de base. On ne peut toujours rien faire pour résoudre le véritable problème. Lorsque j'ai besoin de transférer des fichiers, il me semble que je viens d'envoyer les données (données binaires), mais certaines informations sur le fichier sont perdues (l'extension du fichier). Et chaque fois que je ne peux utiliser qu'un seul Socket pour envoyer un fichier, il n'y a aucun moyen d'envoyer des fichiers en continu (car je compte sur la fermeture du flux pour terminer l'envoi des fichiers, ce qui signifie que je ne connais pas la longueur du fichier, donc je ne peux utiliser qu'une seule connexion Socket qui représente un fichier).

Quelle est la différence entre TCP et IP Quelle est la différence entre TCP et IP Sep 04, 2023 pm 02:19 PM

TCP et IP sont deux protocoles différents sur Internet : 1. TCP est un protocole de couche transport, tandis qu'IP est un protocole de couche réseau ; 2. TCP fournit des fonctions telles que la segmentation, le tri, la confirmation et la retransmission des paquets de données, ainsi que l'IP. Le protocole est chargé de fournir les adresses source et de destination des paquets de données ; 3. TCP est un protocole orienté connexion, tandis que le protocole IP est sans connexion ; 4. TCP fournit également un contrôle de flux et un contrôle de congestion.

L'unité de débit de transmission du canal dans la communication de données est le bps. Qu'est-ce que cela représente ? L'unité de débit de transmission du canal dans la communication de données est le bps. Qu'est-ce que cela représente ? Jan 18, 2021 pm 02:58 PM

L'unité de débit de transmission de canal dans la communication de données est le bps, ce qui signifie « bits/seconde » ou « bits/seconde ». C'est-à-dire que le débit de transmission de données est numériquement égal au nombre de bits binaires qui constituent le code de données transmis par seconde. , également appelé « débit binaire ». Le débit binaire représente le nombre de bits transmis par unité de temps et est utilisé pour mesurer la vitesse de transmission des informations numériques en fonction du nombre de bits occupés par chaque trame de stockage d'image et du débit binaire de transmission, la vitesse de transmission des informations d'image numérique ; peut être calculé.

See all articles