连续多次调用TIDFTP,提示Socket Error #10004,请大家帮忙,谢谢(150分)

  • 主题发起人 主题发起人 starkbl
  • 开始时间 开始时间
S

starkbl

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个DLL里面动态创建一个TIDFTP组件,并完成FTP功能,
比如说我有3个文件连续调用上传的函数,每次都是单独创建TIDFTP组件,并释放
但是总是第一次成功,然后就失败了
提示的错误是Socket Error #10004,Interrupted System Call。请问这为什么?如何解决?


 
忘了说了,我在函数里面循环创建就没有问题,令:在97环境下会出这样的问题,
2000SERVER就没有问题,好像98和XP也没有问题
 
系统winsock.dll调用WSACancelBlockingCall中断阻塞的套接字,所有出错
目前2000和XP都是用winsock2, winsock2 不在支持winsock钩子,所以没有
这个错误发生。
 
请问楼上有解决办法吗?
 
是什么时候失败,是创建还是释放?
 
我想是你用的控件没有处理这个错误,导致出错,
我也碰到过这个错误,是我在线程外终止一个租
塞的线程,但是我是用的winsock api ,对这个
错误进行了处理,
 
第一次连接作FTP没有问题
我正常释放
但是连续进行第二次FTP连接就会出错。

而且为什么我在同一个函数里面循环创建就没有问题呢?
我觉得循环创建和我不停调用应该没有什么区别吧?
 
没代码不好说
 
我想是97对一些winsock函数的实现上有问题,你下个winsock2的补丁下来应该就可以
解决这个问题
 
这一段代码如果放在DLL里面被其他程序连续调用就不行
但是,如果我把他们放在一个循环里面,在DLL的一个函数里面循环调用就不会报错
idftp1 := TIdFTP.Create(nil);
try
try
if not idftp1.Connected then
begin
with idftp1 do
begin
Passive := true;
Host := '10.0.1.12';
User := 'ftpuser';
Password := '123456';
TransferType := ftBinary;
Connect;
end;
end;
if idftp1.Connected then
begin
idftp1.Disconnect;
idftp1.Abort;
idftp1.Quit;
end;
except
on e :exception do
begin
showmessage(e.message + afilename);
end;
end;
finally
idftp1.free;
end;

 
提一下,555
 
多人接受答案了。
 
后退
顶部