Y at-il un moyen de vérifier si une socket s'est déconnectée sur l'extrémité distante sans select() en C? La raison pour laquelle je ne veux pas utiliser select() est que dans le cas où mes tampons sont pleins, il peut y avoir des données disponibles pour la lecture sur le socket que j'ignore intentionnellement et un select (readfds = [socket_fd ]) reviendrait toujours immédiatement me le faire savoir.Vérifiez si une socket est déconnectée en C, sans select()
0
A
Répondre
4
Si vous avez un appel de fonction read() bloquant sur le socket, et qu'il renvoie la valeur entière 0, cela signifie que la connexion socket est fermée.
while (n = read(sockfd, buffer, BUFFER_SIZE)) {
//use buffer contents
}
Cette boucle continuera pendant l'envoi des données à partir de l'autre extrémité.
1
Utilisez à la place poll()
, en réglant events
sur les choses qui vous intéressent et en vérifiant les résultats dans revents
. FYI, vous pouvez appeler select()
ou poll()
sans nuire aux prises ou en changeant leurs tampons.
Questions connexes
- 1. Vérifiez si une socket est connectée avant d'envoyer des données
- 2. Vérifiez si l'application IIS est en cours d'exécution sans l'exécuter
- 3. Vérifiez si une chaîne est codée en UTF-8
- 4. Vérifiez si un tableau est vide sans utiliser de boucle?
- 5. Vérifiez si l'objet est pas de type (! = Équivalent « EST ») - C#
- 6. Vérifiez si une valeur est dans une collection avec LINQ
- 7. Vérifiez si l'utilisateur du processus est un administrateur C++
- 8. Vérifiez si le service est en cours d'exécution dans WiX
- 9. Vérifiez si Yahoo Messenger est installé
- 10. Vérifiez si ftp est complet ou non?
- 11. Vérifiez si une variable contient une valeur numérique en Javascript?
- 12. Vérifiez si un répertoire existe en PHP
- 13. Vérifiez si une bibliothèque DLL est déjà chargée? (Java)
- 14. Vérifiez si Char est dans la gamme
- 15. Vérifiez si une demande est GET ou POST
- 16. Vérifiez si l'application est déjà en cours d'exécution
- 17. Vérifiez si le paquet Python est installé
- 18. Vérifiez si le son est en cours de lecture
- 19. Vérifiez si un proc stocké est en cours d'exécution?
- 20. Vérifiez si le service est en cours d'exécution?
- 21. Vérifiez si le LButton de souris est en panne?
- 22. Vérifiez si le débogage est activé dans une application Pylons
- 23. Vérifiez si textbox a une valeur vide
- 24. Vérifiez si l'e-mail existe
- 25. programmation Socket en C
- 26. Comment vérifier si un Socket est actuellement connecté en Java?
- 27. Vérifiez si un fichier PDF est corrompu avec PHP
- 28. Vérifiez si le site Web est en ligne avec ASP.NET C#?
- 29. Vérifiez si Outlook est installé sur le PC
- 30. Vérifiez si la date est cette date ou plus grande
J'ai quelques problèmes en utilisant poll() comme ça, revents ne contient jamais POLLHUP quand le socket raccroche, juste POLLIN qui ne peut pas être vrai. – unexist
Voir http://www.greenend.org.uk/rjk/2001/06/poll.html pour quelques bonnes informations sur ce problème. – dwc