【发布时间】:2020-12-08 03:18:21
【问题描述】:
SOCKET sampleSocket;
cout << sampleSocket << endl;
// End up with a number
我注意到,当我使用 cout 打印套接字时,我收到了一个数字——该数字代表什么,我如何在使用 cout 之外检索它?
【问题讨论】:
-
谢谢!那么套接字将类似于什么数据类型。我知道 HANDLE 是一个无符号整数,但是 SOCKET 类型是什么?
-
它可能是隐藏在您程序的进程信息中的表中的索引。在这个表中,是实际的套接字控制块,它充满了所有你不会废话的小实现细节。但坦率地说,它几乎可以是任何东西。不管它是什么,也不管它是如何存储的,这个数字是您从某处查找真实套接字信息的关键。
-
@ZacharyZhu 如果你看
SOCKET的实际声明,你会发现它只是UINT_PTR的一个typedef,它是一个指针大小的无符号整数。 -
@user4581301 在 Windows 上,
SOCKET是一个实际的内核对象,就像一个文件、管道等,其中SOCKET包含一个指向实际对象的句柄(相当于一个指针) .它不是进程本地表的索引。