标题几乎说明了一切。我是Winsock的新手,我需要知道SOCKET对象的范围是什么。
在类成员变量中使用它时,我是否需要担心它超出范围(因为当它返回时,它不是动态内存)?
感谢。
我很确定答案是否定的,但由于我找不到信息,我想我会把它放在那里,以便将来快速参考其他人。< /子> 子>
答案 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>