Question

Quand je crée un socket en utilisant accept () et en crée un fichier avec fdopen (), que dois-je faire pour tout nettoyer? Dois-je faire fclose () sur le fichier, shutdown () et close () sur le socket, ou uniquement shutdown () et ou close () ou fclose ()? Si je ne fais pas fclose (), dois-je libérer () le pointeur FILE manuellement?

Était-ce utile?

La solution

De l'homme fdopen:

  

Le descripteur de fichier n’est pas dupliqué et sera fermé à la fermeture du flux créé par fdopen ()

Je voudrais donc simplement utiliser fclose (), qui ferme également le descripteur de fichier sous-jacent. Je ne sais pas si shutdown () est nécessaire non plus.

Autres conseils

De http://opengroup.org/onlinepubs/007908775/xsh/fclose. html

  

La fonction fclose () effectuera une   close () sur le descripteur de fichier qui est   associé au flux pointé vers   par flux.

Si vous avez encapsulé votre socket dans un flux, il n’a probablement plus de sens de shutdown (), du moins pas sans vider d’abord le flux. Mais je ne jurerai pas cela, car je ne sais pas qu’il n’y a pas d’utilisation où vous voudriez arrêter () plutôt que simplement fermer ().

Vous avez ici deux choses à nettoyer: le flux représenté par FILE et le descripteur de fichier représenté par le socket. Vous devez d'abord fermer le flux, puis le descripteur de fichier. Donc, en général, vous aurez besoin de fclose () de tout objet FILE , puis de close () de tout descripteur de fichier.

Personnellement, je n'ai jamais utilisé shutdown () lorsque je souhaite nettoyer après moi-même, je ne peux donc pas le dire.

modifier

D'autres ont correctement fait remarquer que fdclose () fermera également le descripteur de fichier sous-jacent, et que l'appel de close () sur un descripteur de fichier fermé entraînera une erreur , dans ce cas, vous avez seulement besoin de fdclose () .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top