Windows “是什么意思?”;ConnectEx tcp:信号量超时时间已过期;

Windows “是什么意思?”;ConnectEx tcp:信号量超时时间已过期;,windows,tcp,go,Windows,Tcp,Go,我编写了一个简单的go程序,在windows上运行,并测试远程端口是否处于活动状态: package main import ( "fmt" "net" ) func main(){ conn, err := net.Dial("tcp", "192.168.23.191:3403") if err != nil { fmt.Println(err) } else { conn.Close() } } 现在,

我编写了一个简单的go程序,在windows上运行,并测试远程端口是否处于活动状态:

package main
import (
    "fmt"
    "net"
)

func main(){
    conn, err := net.Dial("tcp", "192.168.23.191:3403")
    if err != nil {
        fmt.Println(err)
    } else {
        conn.Close()
    }
}  
现在,远程端口已关闭。我第一次运行它,错误是:

dial tcp 192.168.23.191:3403: ConnectEx tcp: The remote computer refused the network connection.  
然后我继续运行它,错误更改为:

dial tcp 192.168.23.191:3403: ConnectEx tcp: The semaphore timeout period has expired.
为什么拨号会返回“ConnectEx tcp:信号量超时时间已过。”?这个错误是什么意思?

net.Dial()
的调用超时,已过期

如图所示,
Dialer
结构有一个
Timeout
字段,该字段定义了
Dial()
等待连接完成的最长时间。

net.Dial
(带有一些中间函数)调用特定于Windows的BSD套接字扩展。
如果无法建立连接(Windows符合并尝试次数),ConnectEx将失败,并出现
错误\u SEM\u超时
(如果没有正式记录,则可能会出现类似
WSAETIMEDOUT
的错误)

因此,该错误意味着端口已关闭

在Windows 8和更新版本的Windows上,如果您想在Go中执行此操作,您可以自己执行版本检查并调用。

为什么超时返回“信号量超时时间已过期”?我想从你的解释来看,错误应该是“连接超时”,信号量指的是什么?在计算机科学中,特别是在操作系统中,信号量是一种变量或抽象数据类型,用于控制并行编程或多用户环境中多个进程对公共资源的访问。听起来可能在更下游的地方有一个信号量被实现来控制网络上的并发访问,就像
net.Dial()
,一个信号量总是实现一个超时。