En réalité, il est d´usage de déclarer sin (le sin que tu mentionnes en haut de ton topic) comme une structure "sockaddr_in"
Mais certaines fonctions attendent une adresse vers une structure sockaddr. Autrement dit tu remplis une structure sockaddr_in, et avec le cast, tu lui fais croire que tu lui passes une structure sockaddr.
Utilisation standard dans cet exemple :
http://www.commentcamarchrche.net/sockets/sockfonc.php3
Dans un cas commun, cette manipulation est dangereuse, et il est déconseillé de l´utiliser (le moindre changement de structure décale les données, et ça bousille tout)
Mais en réseau, ça marche comme ça. Regardez les 2 structures :
http://msdn2.microsoft.coom/en-us/library/ms740496.aspx
On a sockaddr_in qui contient un short, puis d´autres données, et sockaddr, qui est plus générale, qui contient un short, puis un tableau de char.
Le tableau de char représente ici finalement un buffer quelconques, et les données remplies dans sockaddr_in sont finalement placées a des endroits précis du buffer.
Si vous regardez la page ci dessus, il y a d´autres structures, qui, elles aussi, pourront etre castées en sockaddr.
Finalement, je vois ça (vite fait) comme une sorte de polymorphisme, la classe mere étant sockaddr, qui dit "j´ai un short, plus un tampon de données", et les autres structures qui spécifient leur données de façon a remplir plus facilement le tampon de données.
C´est une astuce du langage C qui permet de faire - vite fait - une sorte de polymorphisme. Mais c´est super dangereux, il faut etre sur de son coup.
Pour le réseau, pas de soucis, car les structures ne bougent plus, et ne bougeront jamais. Cela permettra de manipuler de l´IP V6, voir meme les futures évolutions, de la meme maniere, grace a ce "polymorphisme". On remplira une structure "sockaddr_nouveautruc" puis on castera en sockaddr.
C´est la philosophie réseau.
Geek-puissant > non, justement, je pense qu´il ne faut pas mélanger ce passage en C, qui doit rester en C, avec du C++. (meme si ça n´aura pas d´incidents)
Disons que la philosophie du réseau est du C, et certains amoureux du réseau trouveront que c´est un sacrilege de mettre ici un static_cast.
Par contre, rien n´empeche d´encapsuler le réseau dans une classe, mais disons que tu encapsules tout, et donc tu fais abstraction de sockaddr et sockaddr_in que tu noies dans la classe.