利用ACE_Reactor框架,网络编程问题
目前我在linux下用ACE_Reactor框架编写一个TCP客户端,再用ACE_Connector连接服务端时,绑定了本地IP和端口,也就是说我到connect函数中同时传入了服务器端的ACE_INET_Addr和本地要绑定的ACE_INET_Addr参数,第一次连接可以成功,并通讯正常,当我关闭该连接的服务处理器并退出程序后,再次启动程序连接服务端时,连接失败,大约要等一分钟左右才可以连上,我关闭连接是用的ACE_Reactor::instance()->remove_handler(),然后会调用默认的handle_close函数。
后来发现如果我不绑定本地到IP和端口,就没有这样的问题,这所为啥呢,难道socket没释放好?这是handle_close中默认执行的啊,如果没有释放好,为什么一分钟后又能连上呢?
希望高人给予指点,谢谢!
[解决办法]
这个是TCP协议的事情,因为你释放了一个链接,其中有一端会变成TIME_WAIT状态。你绑定的本地和远程地址与原来的链接是一样的,TCP为了防止后来相同的socket被误解为原先的socket,TCP不给处于TIME_WAIT状态的链接重新发起一个新的化身。