Winsock中SOCKET对象的范围是什么?

时间:2016-12-01 06:50:04

标签: c++ scope winsock winsock2

标题几乎说明了一切。我是Winsock的新手,我需要知道SOCKET对象的范围是什么。

在类成员变量中使用它时,我是否需要担心它超出范围(因为当它返回时,它不是动态内存)?

感谢。

我很确定答案是否定的,但由于我找不到信息,我想我会把它放在那里,以便将来快速参考其他人。< /子>

2 个答案:

答案 0 :(得分:2)

MSDN documentation for socket说明如下:

  

会话完成后,必须执行closesocket

随附的样本就是这样。 documentation for closesocket更有力:

  

每次成功调用socket时,应用程序应始终对closesocket进行匹配调用,以便将任何套接字资源返回给系统。

因此,只要您将SOCKET描述符保留在某处,就可以使用它,直到您调用closesocket为止。您可以考虑将其置于您自己的RAII类型中(或使用现有的类型)以避免泄漏。如果你忘了&#34;描述符,你将泄漏内部资源。

答案 1 :(得分:1)

在内部,SOCKET只是一些ID,它指的是一些内部Windows结构。您可以像使用HANDLE或通常的指针一样使用它。

即。什么都不会发生,如果它会超出范围(但它可以泄漏资源,如HANDLE,如果你忘了CloseHandle),如果你复制它 - 你会去2个相同的套接字,这是指相同的Windows结构,等等。 / p>