2009-08-22 15 views
2

Je peux voir qu'il ressemble à un alias pour un pointeur non signé int, non? Est-ce juste comme un pointeur dans la mémoire? À quoi serait-il en train de pointer? Est-ce qu'il pointe vers une structure? Si oui, comment cette structure est-elle définie? Est-ce juste un nombre qui est utilisé par les fonctions de socket et ne correspond pas à une adresse de mémoire?Quel est le type de SOCKET?

Répondre

7

Dans Win32, un type de données SOCKET est la même que celle d'un HANDLE, qui est un entier utilisé pour désigner une structure de données du noyau d'une sorte. Cette structure de données du noyau est "opaque", ce qui signifie que les programmes d'application n'ont pas besoin (et ne peuvent en fait pas) voir les composants internes de la structure. Tous les accès à Win32 SOCKET se fait via les fonctions de l'API Winsock.

Notez que dans Win16, un SOCKET n'était pas la même chose car il n'y avait pas de type Win16 HANDLE. Toutefois, Win32 a conservé le même nom de type pour la compatibilité source.

+0

"Handle" définit ce que c'est, malgré ce n'est pas une poignée Win32 régulière. La plupart des HANDLE sont des pointeurs vers les objets qu'ils représentent, mais pas avec SOCKET. C'est plus comme une pièce d'identité qu'une poignée. – Havenard

+0

Tous les HANDLE Win32 sont des index d'entier dans la table d'objets du noyau; ils ne sont pas des pointeurs en tant que tels. –

2

de Wikipedia-

En général, un descripteur de fichier est un indice pour une entrée dans une structure de données résidant dans le noyau contenant les détails de tous les fichiers ouverts . Dans POSIX, cette structure de données est appelée table de descripteur de fichier, et chaque processus a sa propre table de descripteur de fichier . L'application utilisateur transmet la clé abstraite au noyau via un appel système, et le noyau accède au fichier au nom de l'application , en fonction de la clé. L'application elle-même ne peut pas lire ou directement la table des descripteurs de fichier . link

2

Vous pouvez consulter the Linux source for socket.h, par exemple. Bien que dans le cas des sockets (dont le type n'est pas réellement décrit dans socket.h), un socket est un descripteur de fichier, pas très différent du retour de open en C (que vous n'utilisez pas dans la programmation au jour le jour)). Quant à ce qu'est un file descriptor: à un niveau très élevé, c'est typiquement un int que l'OS traduit en un moyen de communiquer avec un objet fichier, ou un objet socket pour les communications réseau, ou un canal pour communiquer entre processus ...

Questions connexes