这是否为 Delphi的 BUG 关于 Socket(50分)

  • 主题发起人 主题发起人 QSmile
  • 开始时间 开始时间
Q

QSmile

Unregistered / Unconfirmed
GUEST, unregistred user!
在 Sockets 单元里。有一个类 TBaseSocket 是网络控件的基类
在 它的 Close 过程里没有 CloseHandle 这样的语句。
只是把 FSocket := INVALID_SOCKET;
这是否为 Delphi 的 BUG
在 D6 的 Sockets 的462 行。

procedure TBaseSocket.Close;
begin
if FActive then
begin



{$IFDEF LINUX}
ErrorCheck(Libc.__close(FSocket));
{$ENDIF}
FSocket := INVALID_SOCKET;
FActive := False;
DoDestroyHandle;
end;
end;
 
我看看去!
 
看过DoDestroyHandle没有
 
>>看过DoDestroyHandle没有

当然看了!
只有一句
if Assgined(...) then FOn...

调用事件处理的。
大家再看看!我认为真的是个 Bug .

不过我想是这样的:
因为定议是为: procedure Close; virtual;
而这个基类在 面板上是没有的。
在它的派生类 TCustomIpClient 里的 Close
派生一个 Close
再在里面用
ErrorCheck(shutdown(FSocket, SD_BOTH));
关闭 Socket。

我个人认为这种方法是不是不太好?
 
既然是个基类,如果这个方法大多数情况下都被覆盖的话,
就不会有问题,
只是编程的习惯不同而已,
就连Borland的程序员也有水平的高低,
类似这样的编写不合理的地方,在VCL里面可不只这一处
 
这个基类的方法没有被覆盖。
在它的派生类 TCustomIpClient 里的 Close 过程里 inhertid 了的。

看来没有办法了!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部