socket编程,客户端断开后再连接,就出现10048错误(50分)

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

science

Unregistered / Unconfirmed
GUEST, unregistred user!
我是直接用socket API编程的,没有用任何网络组件。

如果客户端先shutdown,closesocket,服务器端用accept创建的socket 再shutdown,closesocket,
那么客户端再次socket,bind(使用原来的地址和端口),connect,就会产生10048错误:Address already in use.

但是,如果是服务器先断,客户端后断就没有这个问题。
这是为什么呢?怎么解决?

我的环境:Delphi5,Windows 2000 Professional



 
不好意思,你的连接没断开!所以会导致这种结果!
比较简单的办法是涌现有的控件比如ICS等!
 

你要设置一个参数
var
ON:longbool;
ON:=TRUE;
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,@ON,Sizeof(ON));
 
楼上的方法我试过了,还是有错。

怎样才能使连接真正断开呢?



 
就是这样的,没有问题。因为TCP/IP方式下客户端socket不需要bind,连接时会自动分配
端口号。
 
因为这个时候WINSOCK处于wait_time状态,等40秒后就好了,:)
 
struct linger {
u_short l_onoff;
u_short l_linger;
}
如果l_onoff是一个非零值,就意味着可以进行关闭拖延,
而l_linger对应的是一个一段拖延时间, 以秒为单位
通过SO_LINGER选项一道,调用setsockopt,设linger
的l_onoff的字段设为0


来自:张无忌, 时间:2002-5-12 18:19:00, ID:1096404 | 编辑
通过一个SO_DONTLINGER设置一个


 
楼上的方法也试过了,仍然出错,
不过我已经找到了一个办法,把端口设为0,这样系统会自动分配空闲端口。


 
多人接受答案了。
 
后退
顶部