是否可以将应用程序数据附加到套接字?

时间:2013-12-10 20:10:32

标签: c winapi winsock2

我正在用C开发一个事件驱动的Win32套接字服务器。为了控制通信过程的几个方面,我需要在接受新连接的那一刻创建一个数据结构,但是我还没有找到了一种方法将我的应用程序的数据附加到新接受的套接字,以便通过知道套接字我可以有效地检索连接控制数据,因此,每次我收到FD_READ或FD_CLOSE消息时,我必须执行搜索操作,但即使搜索功能非常有效,它仍然意味着开销。

我想知道是否有一组类似于SetWindowLongPtr / GetWindowLongPtr的函数可以允许我将应用程序的数据附加到每个新套接字,这样我就可以完全避免搜索操作。

澄清:

我不是在寻找一种更有效的搜索方式,我正在使用的方法非常有效,我想要的是一种完全避免任何类型的搜索操作的方法(如果可能的话)。

1 个答案:

答案 0 :(得分:1)

为避免每次都必须查找套接字数据,请切换到I / O完成端口:

Windows Sockets 2.0: Write Scalable Winsock Apps Using Completion Ports

使用CreateIoCompletionPort()创建IOCP并将每个接受的套接字与其关联,然后使用WSASend()WSARecv()执行异步套接字I / O操作,这允许您传递自定义数据指针每次操作。为此目的定义和分配自定义struct。然后定期调用GetQueuedCompletionStatus(),例如在工作线程中,每个IOCP通知将为您提供与已完成的套接字操作关联的struct指针。