如何根据收到的FD_READ判断来自哪一个SOCKET (OpenSSL达人也请)

心中那自由的世界 2007-09-17 06:15:23

这个问题是由OpenSSL引起的,因为我不知道怎么用BIO来操作Overlapped IO,所以我写了一个异步事件选择模型的服务器。我需要在接到FD_READ的时候判断出这次的数据来自哪个SOCKET,然后对这个SOCKET调用SSL_read函数。请问,怎么样才能知道现在要接收的数据来自哪个客户端对应的SOCKET?

如果有谁知道怎么在这种情况下用BIO,我另开贴送100分。。。
...全文
284 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
BaoBrother 2009-10-17
  • 打赏
  • 举报
回复
楼主问题解决了吗?我也碰到这个问题,现在总算是自己解决了。
僵哥 2007-09-21
  • 打赏
  • 举报
回复
其实曾经有考虑过接管SSL的那个通讯,不过也只是想想,因为要拆解出来的话,所有证书协议都要进行重新封装,感觉这个耗费没有太多的意义,事实上能够提高的性能也没太多,毕竟SSL的性能瓶颈,除非机器相当强,否则的话都在加密和解密上面,而不是网络I/O。
  • 打赏
  • 举报
回复
楼上说的有道理,而且不知道windows搞了什么,如果接到FD_READ再用SSL_read去读数据,就报错。我现在用最原始的API去做了。

晚上散分,接分的来了啊。
僵哥 2007-09-21
  • 打赏
  • 举报
回复
SSL_read,好象都是采用直接检索的方式,对于Overlapped IO,可能不太好处理。Overlapped IO是被动读,但是SSL_read是主动,除非使用事件模式进行隔离同步。
manbaum 2007-09-21
  • 打赏
  • 举报
回复
接到FD_READ的时候没有参数告诉你是哪个socket的read事件?我觉得有点离谱。
  • 打赏
  • 举报
回复
准备散分,接分的进来走两步了。
  • 打赏
  • 举报
回复
曲线救国啊,这个方法只能同时支持64个连接,再多就不好办了。谢谢了,我再找找
hurryboylqs 2007-09-18
  • 打赏
  • 举报
回复
不是有个SOCKET数组和一个EVENT(事件)数组么?初始EVENTS总数(nEventTotal)是0,你用个循环来对每个处于等待的事件调用WSAWaitForMultipleEvents,是ACCEPT事件就得到一个新的套接口,把这个新的套接口存到这个SOCKET数组表里,每调用WSAEventSelect nEventTotal++,当有FD_CLOSE事件发生时关闭引发该事件对应的套接口然后移动数组元素(事件数组列表和套接口数组列表),并使nEventTotal--。
要看你对WSAEventSelect模型的熟练程度了,代码我就不写了,网上搜WSAEventSelect模型字样,一堆例子,这里给个连接你:
http://softsky.jblog.cn/54039.shtml,你一定能从里面找到答案的^_^
  • 打赏
  • 举报
回复
我的问题是 FD_READ 的时候如何判断它来自哪一个SOCKE,这个是根本问题. 如果不是要用OPENSSL,我早就用完成端口写好了.是用TCP收发的,Accept也确实返回一个SOCKET,但那个是FD_ACCEPT的时候收到的,我现在找不到办法让它在FD_READ的时候也能够用得上.难道要用CAsyncSocket?....
hurryboylqs 2007-09-17
  • 打赏
  • 举报
回复
你这个叫做WSAEventSelect模型,我说的哪个是以windows消息形式接收网络事件,你是TCP方式收发么?TCP里不是需要Accep吗?Accep不是返回一个新的连接套接口么?

返回一个新的连接套接口时你再调用 WSAEventSelect把FD_READ,FD_WRITE,FD_CLOSE事件跟你的网络事件关联起来就可以了嘛
  • 打赏
  • 举报
回复
我是用WSAEventSelect做的, WSAWaitForMultipleEvents 等到事件,WSAEnumNetworkEvents 取出 FD_READ。 请问你说的这个消息应该怎么做?
hurryboylqs 2007-09-17
  • 打赏
  • 举报
回复
异步消息选择机制不是允许你投递一个自定义消息么?
这个自定义消息的wParam附加参数就是套接字的句柄,你可以这样接收:

case WM_SOCKET: // 这是你的自定义消息
{
SOCKET s = (SOCKET)wParam;
switch(LOWORD(lParam)
{
case FD_READ:
...
break;
}
}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧