连接到新创建的套接字只需要三秒钟

时间:2016-09-12 07:38:43

标签: java multithreading sockets

为什么当一个Java线程开始侦听端口(在127.0.0.1上)而另一个线程连接到该端口时,即使线程充分同步,connect()调用也需要3秒钟?

即,为什么我的测试程序会产生

的输出
Server: accepting...
Client: connecting...
Server: accepted. Millis: 3008
Client: connected. Millis: 3008

大部分时间?

测试是在使用Java 1.6和1.8的Windows 7 PC上运行的,结果相同。我假设,尽管我使用CountDownLatch进行同步,但我遇到bind()connect()之间的竞争条件。在bind()(在服务器套接字的构造函数中调用)之后,似乎存在一个时间窗口,其中端口尚未真正绑定,因此{{1}遇到错误并重试。

但这只是我的解释。这是代码:

connect()

1 个答案:

答案 0 :(得分:-1)

卸载 Check Point VPN 后,此问题完全可靠地消失,这似乎导致了使bind()异步的副作用。