File: main.go

package info (click to toggle)
golang-github-kisom-goutils 0.0~git20161101.0.858c9cb-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 384 kB
  • ctags: 331
  • sloc: makefile: 6
file content (75 lines) | stat: -rw-r--r-- 1,282 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package main

import (
	"flag"
	"fmt"
	"net"
	"os"
	"time"
)

const (
	defaultServer = "google.com"
	defaultPort   = "80"
)

var verbose bool

func connect(addr string, dport string, six bool, timeout time.Duration) error {
	_, _, err := net.SplitHostPort(addr)
	if err != nil {
		addr = net.JoinHostPort(addr, dport)
	}

	proto := "tcp"
	if six {
		proto += "6"
	}

	if verbose {
		fmt.Printf("connecting to %s/%s... ", addr, proto)
		os.Stdout.Sync()
	}

	conn, err := net.DialTimeout(proto, addr, timeout)
	if err != nil {
		if verbose {
			fmt.Println("failed.")
		}
		return err
	}

	if verbose {
		fmt.Println("OK")
	}
	conn.Close()
	return nil
}

func main() {
	var (
		port    string
		timeout time.Duration
		six     bool
	)

	flag.BoolVar(&six, "6", false, "require IPv6")
	flag.StringVar(&port, "p", defaultPort, "`port` to connect to instead of "+defaultPort)
	flag.DurationVar(&timeout, "t", 3*time.Second, "`timeout`")
	flag.BoolVar(&verbose, "v", false, "verbose mode: print server and protocol when connecting")
	flag.Parse()

	var servers []string
	if flag.NArg() == 0 {
		servers = []string{defaultServer}
	} else {
		servers = flag.Args()
	}

	for _, server := range servers {
		err := connect(server, port, six, timeout)
		if err != nil {
			os.Exit(1)
		}
	}
}