# 刚发现 Winsock Control 的 bug

Posted by Maxwell on September 14, 1998 at 18:35:57:

Microsoft 98/9/5 公布在 Winsock control 上的一个 BUG, 这个 BUG 会影响 VB 5.0 与 6.0 的专业版、企业版(也就是连 6.0 的 VB 都逃不过 Microsoft 这个大虫窟), 这个 BUG 是在使用 LOAD 及 UNLOAD 载入及释放 Winsock 物件阵列时, 并不会完全的把相关的资源及占用的记忆体释放掉, 因此利用 Winsock 写出来的程式到最后会把你的系统资源全部吃光, 并因此导致系统停止回应, 有兴趣请至 Microsoft 查看:
http://support.microsoft.com/support/kb/articles/q171/8/43.asp

另外不小心看到一则 Winsock 长久以来受到困扰的资讯..
有用过 Winsock Control 的人都会发现在 Close Connection 后如果马上执行 Connect, 会出现 "位址已经使用" 的错误讯息, 翻遍所有的书籍, 都是不外乎两种解决方式:
1. 使用 CreateObject 产生物件, Close 后以 Set Winsock=Nothing 释放物件
2. 使用 Load 方式载入物件, Close 后以 Unload 释放物件
在 Microsoft 网站上也公布这个问题的原因, 因为 Winsock 在 Close 时会需要两倍的 ACK 时间来完成 Server 与 Client 的 Close 动作, 而 Winsock 内定的 ACK 时间是两分钟, 因此一个 Close 时间就得花掉四分钟, 也是有解决方法(可以不用 CreateObject 或 LOAD...UNLOAD), 在执行 Connect 方法前, 先设定 LocalPort=0, 随意抓取一个本地 TCP Port 使用, 不过是不是这样就没问题我就没试过... 详情:
http://support.microsoft.com/support/kb/articles/q173/6/19.asp

Follow Ups:

- Re: 刚发现 Winsock Control 的 bug Windows NT user 17:52:57 9/15/98 (0)