2009-08-22 3 views
2

Я вижу, что это похоже на псевдоним для указателя int без знака, не так ли? Это как указатель в памяти? На что это будет на самом деле указывать? Указывает на структуру? Если да, как определяется эта структура? Это просто номер, который используется функциями сокетов и не отображается на адрес памяти?Что такое тип SOCKET?

ответ

7

В Win32, тип данных SOCKET является такой же, как HANDLE, который является целым числом, используется для обозначения структуры данных ядра некоторого вида. Эта структура данных ядра «непрозрачна», что означает, что прикладные программы не нуждаются (и фактически не могут) видеть внутренности структуры. Все доступ к Win32 SOCKET s осуществляется через функции API Winsock.

Обратите внимание, что в Win16, SOCKET было не то же самое, потому что не было типа Win16 HANDLE. Однако Win32 сохранил одноименное имя для совместимости с исходным кодом.

+0

«Ручка» определяет, что это такое, несмотря на то, что это не обычная ручка Win32. Большинство HANDLE являются указателями на объекты, которые они представляют, SOCKET этого не делает. Это больше похоже на идентификатор, а затем ручку. – Havenard

+0

Все дескрипторы Win32 являются целыми индексами в таблице объектов ядра; они не являются указателями как таковыми. –

2

из wikipedia-

Обычно дескриптор файла является индекс для записи в ядро-резидентной структуры в данных, содержащей информацию обо всех открытых файлов. В POSIX эта структура данных равна , называемой таблицей дескриптора файла, и каждый процесс имеет свой собственный файл дескриптора . Пользовательское приложение передает абстрактный ключ в ядро ​​ через системный вызов, а ядро ​​ будет обращаться к файлу от имени приложения на основе ключа. Само приложение не может прочитать или непосредственно написать таблицу дескриптора файла . link

2

Вы можете проверить, например, the Linux source for socket.h. Хотя в случае сокетов (тип которых фактически не описан в socket.h), сокет является файловым дескриптором, не похожим на возврат open в C (который вы не используете в повседневном программировании).

Что касается file descriptor: на очень высоком уровне, как правило, это просто int, что ОС преобразуется в способ связи с файловым объектом или сокетным объектом для сетевой связи или с каналом связи между процессы ...