您现在的位置: 中国教师站 >> 教师关注 >> 电脑技术 >> 编程技术 >> Visual C >> 正文

Google
Windows Sockets 2.0:使用完成端口高性能,可扩展性Wi
作者:Siny 文章来源:中国教师站cn-teacher 点击数: 更新时间:2007-4-22 12:55:13
ide list of free structures.

newolp = AllocateOverlappedPlus();

if (!newolp)

{

// Error

}

newolp->s = OverlapPlus->sclient;

newolp->OpCode = OP_READ;

// This function prepares the data to be sent

PrepareSendBuffer(&newolp->wbuf);

ret = WSASend(

newolp->s,

&newolp->wbuf,

1,

&newolp->dwBytes,

0,

&newolp.ol,

NULL);

if (ret == SOCKET_ERROR)

{

if (WSAGetLastError() != WSA_IO_PENDING)

{

// Error

}

}

// Put structure in look aside list for later use

FreeOverlappedPlus(OverlapPlus);

// Signal accept thread to issue another AcceptEx

SetEvent(hAcceptThread);

break;

case OP_READ:

// Process the data read

// ???

// Repost the read if necessary, reusing the same

// receive buffer as before

memset(&OverlapPlus->ol, 0, sizeof(OVERLAPPED));

ret = WSARecv(

OverlapPlus->s,

&OverlapPlus->wbuf,

1,

&OverlapPlus->dwBytes,

&OverlapPlus->dwFlags,

&OverlapPlus->ol,

NULL);

if (ret == SOCKET_ERROR)

{

if (WSAGetLastError() != WSA_IO_PENDING)

{

// Error

}

}

break;

case OP_WRITE:

// Process the data sent, etc.

break;

} // switch

} // while

} // WorkerThread

 

--------------------------------------------------------------------------------

查看以上代码,注意如果Overlapped操作立刻失败(比如,返回SOCKET_ERROR或其他非WSA_IO_PENDING的错误),则没有任何完成通知时间会被放到完成端口队列里。反之,则一定有相应的通知时间被放到完成端口队列。

更完善的关于Winsock的完成端口机制,可以参考MSDN的Microsoft PlatFormSDK,那里有完成端口的例子。访问http://msdn.microsoft.com/library/techart/msdn_servrapp.htm.可以获得更多信息。

 

 

 

 

Windows NT 和 Windows 2000 的Sockets体系结构

学习一些WinNT和Win2000基本的Sockets体系结构有益与对扩展性规则的理解。下图表示当前版本Win2000的Winsock实现。应用程序不应该依赖于这里描述的一些底层细节(指drivers ,Dlls之类的),因为这些可能会在未来版本的操作系统中被改变。

 

Socket 体系结构

Winsock2.0规范支持多种协议以及相关的支持服务。这些用户模式服务支持可以基于其他现存服务提供者来扩展他们自己的功能。比如,一个代理层服务支持(LSP)可以把自己安装在现存的TCP/IP服务顶层。这样,代理服务就可以截取和重定向一个对底层功能的调用。

与其他操作系统不同的是,WinNT和Win2000的传输协议层并不直接给应用程序提供socket风格的接口,不接受应用程序的直接访问。而是实现了更多的通用API,称为传输驱动接口(Transport Driver Interface,TDI).这些API把WinNT的子系统从各种各样的网络编程接口中分离出来。然后,通过Winsock内核模式驱动提供了sockets方法(在AFD.SYS里实现)。这个驱动负责连接和缓冲管理,对应用程序提供socket风格的编程接口。AFD.SYS则通过TDI和

上一页  [1] [2] [3] [4] [5] [6] 下一页

相关专题:
 
 网友评论:(评论内容只代表网友观点,与本站立场无关!)
GOOGLE广告

阅读排行

| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
中国教师站

中国教师站 版权所有 Copyright © 2006-2020 All Rights Reserved 站长:Sina & Siny
[备用域名:www.JXZYW.Com] 有事请留言有事请留言
【实力成就精品 诚信呵护品牌】

信息产业部备案
苏ICP备06018635号