慎用WSACleanup()

   中止Windows Sockets DLL的使用.

          #include <winsock.h>

          int PASCAL FAR WSACleanup ( void );

应用程序或DLL在使用Windows Sockets服务之前必须要进行一次成功的WSAStartup()调用.当它完成了Windows Sockets的使用后,应用程序或DLL必须调用WSACleanup()将其从Windows Sockets的实现中注销,并且该实现释放为应用程序或DLL分配的任何资源.任何打开的并已建立连接的SOCK_STREAM类型套接口在调用 WSACleanup()时会重置; 而已经由closesocket()关闭却仍有要发送的悬而未决数据的套接口则不会受影响- 该数据仍要发送.

对应于一个任务进行的每一次WSAStartup()调用,必 须有一个WSACleanup()调用.只有最后的WSACleanup()做实际的清除工作;前面的调用仅仅将Windows Sockets DLL中的内置引用计数递减.一个简单的应用程序为确保WSACleanup()调用了足够的次数,可以在一个循环中不断调用WSACleanup()直 至返回WSANOTINITIALISED.

返回值:   0 操作成功.     SOCKET_ERROR 否则.同时可以调用WSAGetLastError()获得错误代码.

   一个常见的Windows Sockets编程错误是:试图在一个阻塞钩子函数中调用WSACleanup()并且检测返回值失败.如果在一次阻塞调用正在进行时应用程序需要退出, 应用程序必须首先通过调用WSACancelBlockingCall()使该阻塞操作作废, 然后一旦控制返回给应用程序时就启动WSACleanup().

  良好的Windows Sockets应用程序会通过调用WSACleanup()指出它从Windows Sockets实现中注销.本函数因此可以用来释放分配给指定应用程序的资源.

 在一个多线程的环境下,WSACleanup()中止了Windows Sockets在所有线程上的操作.

慎用原因:

由于WSACleanup()的调用会导致将socket的初始化资源从Windows Sockets的实现中注销,并且该实现释放为应用程序或DLL分配的任何资源,因此,在编写ie空间的时候没有调用WSAStartUP(),而又调用了WSACleanup(),或导致页面不正常请求中断,致使ie浏览出现不可预见的意外......

慎用WSACleanup()

时间: 2024-08-26 02:12:47

慎用WSACleanup()的相关文章

php编译参数注解--不明白许多参数的作用 慎用 –with-curlwrappers参数

在Linux下安装PHP,源代码方式安装,总需要配置很多参数.这里列出常用配置参数,并详细用中文解释说明了.给大家一些参考 编译PHP的时候慎用 –with-curlwrappers参数 ./configure --prefix=/usr/local/PHP                                   php 安装目录 --with-apxs2=/usr/local/apache/bin/apxs     表示使用apache2.0以上版本,apxs表示使用的apache

慎用缺省构造函数的一种场景

本文通过示例来谈谈慎用缺省构造函数的一种设计场景.--以JAVA为例展开讨论. 为了便于讨论,我们假定需要建模一个Student,包括姓名和出生地两个属性.我们看到不少下面的代码: public class Student { private String name = null; private String birthPlace = null; public Student() { } public void setName(String name) { this.name = name;

慎用System.Web.HttpContext.Current

每当控制流离开页面派生的Web表单上的代码的时候,HttpContext类的静态属性Current可能是有用的. 使用这个属性,我们可以获取当前请求(Request),响应(Response),会话(Session,)和应用程序对象(Application objects)以及请求更多服务. 以下面的代码为例. private void Page_Load(object sender, System.EventArgs e) { MyClass myClass = new MyClass();

Effective_java之二:慎用重载函数

每周写一篇技术博客的愿望一直没实现, 从这周開始每周五晚10点是写博客的时间 OOP的一个重要特性就是多态,实现多态的目的有多种途径.比方:重载overload.重写overwite.面向接口编程等等.可是在实际应用中应该慎用重载,这也是Effective Java中提到的一条.以下先展示下eJava中提到的代码: @Test public void testOverWrite(){ List<Integer> intList = new ArrayList<Integer>();

慎用Outline ,UGUI Outline实现原理分析

使用 UGUI 制作背包的时候,同事发现如果背包中添加了大量的物品,比如两百个,Unity就会出错,提示 Canvas element contains more than 65535 vertices. This is not supported .意思就是 Canvas下面的顶点数过多. 转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn 如下图: 但是一个物品 的GameObject 难道有300个顶点不成? 不看不知道一看吓

Effective Item 13 - 慎用tagged class

其实作者的原标题是<Prefer class hierarchies to tagged classes>,即用类层次优于tagged class. 我不知道有没有tagged class这么一说,其实作者指的tagged class的是一个类描述了多种抽象,可以根据某个field决定不同的实例. 下面是书中例子,使用shape和部分表示长度的field构成形状并计算面积,脑补一下什么是tagged class: class Figure { enum Shape { RECTANGLE, C

慎用私有继承

在C++中,public 公有继承被视为"is-a"关系. class Animal{ public :    void Eat() { ... } }: class Tiger : public Animal{ public:    bool IsKing() {...} };// Tiger 是一种Animal 如果public换成private,编译器不能将派生类对象转型为基类对象,所有不能调用基类中的成员函数,不再是"is-a"的关系. ----------

C/C++中慎用宏(#define)

宏的定义在程序中是非常有用的,但是使用不当,就会给自身造成很大的困扰.通常这种困扰为:宏使用在计算方面. 本例子主要是在宏的计算方面,很多时候,大家都知道定义一个计算的宏,对于编译和编程是多么的有用.现在定义有以下一个计算 "乘法" 的宏. #include <stdio.h> #define MUL(a) ((a)*(a)*(a)) int main(int argc,char *argv[]) { int i = 10; int sum = MUL(i); printf

慎用UltraEdit32打开UTF8格式文件

UTF16的BOM头是FF FE,UTF8的BOM头是EF BB BF.但是用UltraEdit32打开UTF8文件,切换到HEX模式,会发现BOM头变成了FF FE.而且在打开log4j的UTF8编码的日志文件时,中文也会显示为乱码.为了避免烦恼,决定以后不用UltraEdit32打开UTF8文件了. 使用Notepad++打开则无任何问题.     慎用UltraEdit32打开UTF8格式文件