【发布时间】:2013-12-10 20:10:32
【问题描述】:
我正在用 C 语言开发一个事件驱动的 Win32 套接字服务器。为了控制通信过程的几个方面,我需要在接受新连接的那一刻创建一个数据结构,但是我没有找到了一种将我的应用程序数据附加到新接受的套接字的方法,即通过知道套接字我可以有效地检索连接控制数据,因此,每次我收到 FD_READ 或 FD_CLOSE 消息时,我都必须执行搜索操作,但即使搜索功能非常高效,它仍然意味着开销。
我想知道是否有一组类似于 SetWindowLongPtr/GetWindowLongPtr 的函数可以让我将应用程序的数据附加到每个新套接字,这样我就可以完全避免搜索操作。
澄清:
我不是在寻找一种更有效的搜索方式,我正在使用的是一种非常有效的方式,我想要的是一种完全避免任何类型的搜索操作的方式(如果可能的话)。
【问题讨论】:
-
因为套接字是由文件描述符表示的,所以你可以只使用一种非常基本的全局查找结构。
-
如何复用多个套接字?使用 WSAAsyncSelect()(您可以在其中将索引编码到消息中)、select()(在这种情况下您无论如何都需要线性搜索)或其他什么?