recv的问题,服务端线程死了 ( 积分: 200 )

  • 主题发起人 主题发起人 tangyan
  • 开始时间 开始时间
T

tangyan

Unregistered / Unconfirmed
GUEST, unregistred user!
我第一次用api写一个文件传输,用的是阻塞方式,客户端用户一个线程循环发送,服务端用一个线程循环接收,正常情况下没有问题,但是当我在传输过程中,拔掉客户端网线时,发现服务端线程死了,
我调试发现是 recv(Mysocket, Data, MaxSendBlock, 0) ,阻塞了操作,一直没有返回,难道说客户端已经断开或发生错误了,服务端都不知道吗?我的接收程序如下:

li_RecSize:=1;
while (li_RecSize>0) do
begin
li_RecSize:=recv(Mysocket, Data, MaxSendBlock, 0);
if (li_RecSize = SOCKET_ERROR) or (I <= 0) then
break;
end
当客户端出现网络问题时,服务端要怎样才能退出recv操作呢???
 
我第一次用api写一个文件传输,用的是阻塞方式,客户端用户一个线程循环发送,服务端用一个线程循环接收,正常情况下没有问题,但是当我在传输过程中,拔掉客户端网线时,发现服务端线程死了,
我调试发现是 recv(Mysocket, Data, MaxSendBlock, 0) ,阻塞了操作,一直没有返回,难道说客户端已经断开或发生错误了,服务端都不知道吗?我的接收程序如下:

li_RecSize:=1;
while (li_RecSize>0) do
begin
li_RecSize:=recv(Mysocket, Data, MaxSendBlock, 0);
if (li_RecSize = SOCKET_ERROR) or (I <= 0) then
break;
end
当客户端出现网络问题时,服务端要怎样才能退出recv操作呢???
 
高手都到那里去了,这么一个都没有回呢?
 
设置接收时间大小。
 
后退
顶部