救命,该死的10048错误(50分)

  • 主题发起人 主题发起人 yhl1118
  • 开始时间 开始时间
Y

yhl1118

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用ics的wsocket,和服务器的连接经常出现10048的错误,要如何写代码,
设置哪些属性,可以避免这个错误,谢谢
 
你就连接前等待一会:)
 
一定要这样吗,没有其他方法吗:(
能否说说wsocket中LingerOnOff和LingerTimeout的意思,要如何使用,谢谢
 
struct linger {
u_short l_onoff;
u_short l_linger;
}
如果l_onoff是一个非零值,就意味着可以进行关闭拖延,
而l_linger对应的是一个一段拖延时间, 以秒为单位
通过SO_LINGER选项一道,调用setsockopt,设linger
的l_onoff的字段设为0
 
通过一个SO_DONTLINGER设置一个不拖延选项,用一个optval参数传递一个true值,
这个值是longbool!!!
 
我看了,我想问一下,如果设定某值,
是否确定能实现立即断开,在连接,不会出现10048的错误
是否有人实现过,谢谢!
我试验了两天了,就是不行:(
 
我没有作过实验,但是我知道这是对在队列中等待发送的数据来说的,如果设为0,就在
closesocket函数后马上关闭socket
 
也就是说,这些值是用来决定是否等待队列中的数据发送完,
而不是决定服务器的端口立即被释放掉,提供给下一个连接使用,是吗?
 
它会立刻关闭这个套接字的,端口也应该关闭的
 
是怎样出现的?是client还是server端出现?把问题说详细点。
 
资料没有说,我认为是对client放建立的套接字和对server建立的和client的accept返回的哪个套接字
 
function MyConnect : boolean;
begin
mWSocket := TWSocket.Create(nil);
mWSocket.OnDnsLookupDone := MyWSocketDnsLookupDone;
mWSocket.OnSessionConnected := MyWSocketSessionConnected;
mWSocket.LingerOnOff := wsLingerOn;
mWSocket.LingerTimeout := 0;
mWSocket.LocalPort := 3800;
mWSocket.DnsLookup(FHost);
end;
procedure MyWSocketDnsLookupDone(Sender: TObject; Error: Word);
begin
mWSocket.Addr := mWSocket.DnsResult;
mWSocket.Port := FServerPort;
mWSocket.Proto := 'tcp';
mWSocket.Connect;
end;
procedure MyWSocketSessionConnected(Sender: TObject;Error: Word);
begin
if Error <> 0 then
begin
//出现10048错误
end
else
begin
mWSocket.SetLingerOption;
end;
end;
以上是我的简单代码,如果我用mWSocket.close结束连接,立即再连接,就出现10048,
以上代码要如何修改可以避免该错误,我是使用ics的wsocket.
大家帮帮忙!!!
 
我也有ICS的wsocket,我建议你还是在程序中等待一会再连接,可能是ICS的BUG把
 
我确实是定义了一个变量,可以设定时间,可是我定义为60秒,
再连接还是会出现10048的错误,多循环几次,有时候不会,大多数会,真是头痛!
这样用户和老板要骂死了,怎么办:(:(
 
你把服务器部分的代码好好修改修改。是服务器部分的问题,你允许它在同一个端口
监听,或者在Closesocket前加一个shutdown试试!
 
我用ICS自带的例子(clidemo.exe和SRVDEMO.EXE)模拟了一下,也就是修改了clidemo.exe,
让他connect---close-----connect,没有问题。基本上可以确定是你程序的问题。
你是不是把server端的代码也简单的贴一下,还有错误出现的规律也再详细说一下。
比如第一次运行有没有错误?另外一定不要开防火墙。
 
后退
顶部