vérifiez toutes les sockets ouverts dans le système d'exploitation linux
Mon programme ouvre un socket avec cette fonction:
sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)
Après l'arrivée de l'envoi de données de la socket est fermée:
proche(sockfd);
Mais le problème est lorsque le programme ne fonctionne pas bien et c'est le blocage. Ainsi, la prise ne sera pas fermé.
Comment puis-je vérifier que tous les connecteurs ouvert sous le système d'exploitation Linux ?
Demander une liste de ouvert "fichiers" lsof
Si vous avez besoin de traiter dans le code, vous devez maintenir une liste de bonnes prises et à proximité en cas de besoin.
peu hors sujet, Vous devez vérifier la valeur de socketfd(renvoyée à partir de socket) pour une meilleure gestion des erreurs.
oui, le numéro de socket est le même à chaque fois que la socket est créé !
Si un processus se termine, tous ses descripteurs de fichiers sont fermés (par le noyau).
Si vous avez besoin de traiter dans le code, vous devez maintenir une liste de bonnes prises et à proximité en cas de besoin.
peu hors sujet, Vous devez vérifier la valeur de socketfd(renvoyée à partir de socket) pour une meilleure gestion des erreurs.
oui, le numéro de socket est le même à chaque fois que la socket est créé !
Si un processus se termine, tous ses descripteurs de fichiers sont fermés (par le noyau).
OriginalL'auteur stack_A | 2013-07-08
Vous devez vous connecter pour publier un commentaire.
Ce sont les fichiers, utiliser
cat
de commande pour les afficher. Par exemple:cat /proc/net/tcp
Vous pouvez également utiliser le
lsof
commande.ce sont des fichiers, utiliser la commande cat pour afficher, comme
cat /proc/net/tcp
Il est généralement plus facile à utiliser
lsof
au lieu de ces.En effet, ajouté à la réponse, merci.
lsof
ne sont pas les sockets RAW (au moins pas sur CentOS). Ils apparaissent danscat /proc/net/raw
OriginalL'auteur Chankey Pathak
Vous pouvez également utiliser ss utilitaire pour vider les sockets statistiques.
Pour vider résumé:
Pour afficher tous les sockets:
Pour afficher les sockets UDP:
Pour afficher les sockets TCP:
Ici vous pouvez lire ss: ss
OriginalL'auteur Sasha Zezulinsky
Vous pouvez utiliser netstat commande
Pour afficher les ports ouverts et établi les connexions TCP,
Pour afficher uniquement ouvrir les ports UDP essayez la commande suivante:
cat /proc/net/raw
C'est parce que vous devez utiliser netstat -w -l, ou encore ss -w -l. Ces commandes affichent écouter raw sockets. Si vous voulez plus d'info, utilisez par exemple ss -w -tnl.
OriginalL'auteur Nithin Bhaskar