L的阻塞操作会失败并返回错误代码WSAEINTR。这时候,中介DLL必须尽快地把控制交还给调用它的任务。因为用户有可能按了Cancel或者Close按钮。应用程序正在急切地盼望获得CPU的控制权。我们推荐中介DLL在进行阻塞调用时安装自己的阻塞钩子来防止不可预见的中介DLL和应用程序之间的互相影响。
为了把Windows Sockets实现成一个纯粹的DLL,有时在DLL内部互相发送消息来通讯和定时是必要的。这是非常合法的。但是Windows
DLL不应该无缘无故地发送消息给一个由客户打开的窗口句柄,除非应用程序要求这些消息。所以为了自身的目的而需要使用消息的Windows Sockets DLL打开了一个隐藏的窗口,并且发送必要的消息给这个窗口的句柄。
附录B.3中的WINSOCK.DEF文件列出了Windows Sockets API功能调用的序数。除了已经列出的序数值外,所有小于999的序数都是保留给将来的Windows
Sockets使用的。对于一个Windows
Sockets实现来说,提供附加的私有的接口也是很方便的。这是完全可以接受的,只要这些调用的序数大于1000,要注意的是,任何使用了某个特定Windows Sockets DLL私有的API的应用程序极有可能在任何其他供应商的Windows Sockets DLL上无法工作。应该注意到,只有使用在这份规范中定义的API才能可以保证每一个Windows
Sockets实现都支持。
如果一个应用程序使用了某个供应商的Windows Sockets DLL的特定接口,最好不要把应用程序与DLL静态连接,而通过Windows Sockets例程LoadLibrary()和GetProcAddress()动态载入,这就使得应用程序在其他不支持同样的扩展功能集的Windows
Sockets DLL系统上运行时,可以得到适当的错误信息。
|