Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208714
  • 博文数量: 64
  • 博客积分: 2010
  • 博客等级: 上尉
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-25 19:03
文章分类

全部博文(64)

文章存档

2013年(1)

2012年(9)

2011年(25)

2010年(7)

2009年(16)

2008年(6)

分类:

2008-03-22 09:19:28

转自:
 
假如没必要的话,我劝你还是使用其它模式写代理程序.
用IOCP写单向发送的服务器,例如http服务器,ftp服务器什么的,逻辑还是很清楚的.但用来写双向性的服务器,象代理服务器(http代理服务器,socks5代理服务器)之类,逻辑会比较混乱.
......
最困难的就是用IOCP,我写的IOCP的代理服务器,IO_Handle中是包括另一个IIO_Handle的(目标的IO_Handle,因为代理服务器是双向的),还有在连接到目标服务器后,IOCP的代理服务器,就要向客户端和目标服务器,同时投递WSARecv(),这是因为你无法知道最先的数据流向的方向是从客户端流经代理,再到目标;还是从目标服务器流经代理,再到客户端的(象http,ftp等的访问,是目标服务器流经代理,到客户端的,而连接IRC服务器等,方向则是相向),以上就是我认为比较要害的两点.

 

以下是我的IOCP模型Socks5代理的IO_HANDLE数据:

typedef struct IO_HANDLE
{
SOCKET OriginalSocket;
IO_HANDLE *FinalHandle;
HANDLE DomainHandle;
char *DomainBuffer;
SOCKADDR_IN DestSocketAddress;
IODATA IOData;
DWORD TotalTransfer;
DWORD Timer;
BOOL IsActive;
省略部分数据
struct IO_HANDLE *Next;

}IOHANDLE,*LPIOHANDLE;

LPIOHANDLE IOHandleListHead = NULL;


阅读(943) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~