Winsock 中 SOCKET object 的范围是什么?
What is the scope of a SOCKET object in Winsock?
标题几乎说明了一切。我是 Winsock 的新手,我需要知道 SOCKET object 的范围是什么。
在 class 成员变量中使用它时是否需要担心它超出范围(因为当它返回时,它不是动态内存)?
谢谢。
我很确定这个问题的答案是否定的,但由于我找不到相关信息,所以我想我会把它放在那里,以供快速参考以后其他人。
在内部,SOCKET只是一些ID,指的是一些内部Windows结构。您可以像使用 HANDLE 或通常的指针一样使用它。
即如果它超出范围,什么也不会发生(但它可能会泄漏资源,例如 HANDLE,如果您忘记了 CloseHandle),如果您复制它 - 您将使用 2 个相同的套接字,它们指的是相同的 Windows 结构等
MSDN documentation for socket
表示如下:
When a session has been completed, a closesocket
must be performed.
附带的示例就是这样做的。 documentation for closesocket
比较厉害:
An application should always have a matching call to closesocket for each successful call to socket to return any socket resources to the system.
因此,只要您将 SOCKET
描述符保存在某处,您就可以在调用 closesocket
之前使用它。您可以考虑将其放入您自己的 RAII 类型中(或使用现有的类型)以避免泄漏。如果你 "forget" 描述符,你将泄漏内部资源。
标题几乎说明了一切。我是 Winsock 的新手,我需要知道 SOCKET object 的范围是什么。
在 class 成员变量中使用它时是否需要担心它超出范围(因为当它返回时,它不是动态内存)?
谢谢。
我很确定这个问题的答案是否定的,但由于我找不到相关信息,所以我想我会把它放在那里,以供快速参考以后其他人。
在内部,SOCKET只是一些ID,指的是一些内部Windows结构。您可以像使用 HANDLE 或通常的指针一样使用它。
即如果它超出范围,什么也不会发生(但它可能会泄漏资源,例如 HANDLE,如果您忘记了 CloseHandle),如果您复制它 - 您将使用 2 个相同的套接字,它们指的是相同的 Windows 结构等
MSDN documentation for socket
表示如下:
When a session has been completed, a
closesocket
must be performed.
附带的示例就是这样做的。 documentation for closesocket
比较厉害:
An application should always have a matching call to closesocket for each successful call to socket to return any socket resources to the system.
因此,只要您将 SOCKET
描述符保存在某处,您就可以在调用 closesocket
之前使用它。您可以考虑将其放入您自己的 RAII 类型中(或使用现有的类型)以避免泄漏。如果你 "forget" 描述符,你将泄漏内部资源。