cleaner handling of socket open
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
24ae9a3033
commit
b932251092
64
socketWIT.go
64
socketWIT.go
|
@ -7,6 +7,10 @@ import "net"
|
||||||
import "fmt"
|
import "fmt"
|
||||||
import "bufio"
|
import "bufio"
|
||||||
|
|
||||||
|
import "github.com/svent/go-nbreader"
|
||||||
|
|
||||||
|
import "git.wit.com/jcarr/dnssecsocket"
|
||||||
|
|
||||||
// import "github.com/gookit/config"
|
// import "github.com/gookit/config"
|
||||||
// import "git.wit.com/wit/gui"
|
// import "git.wit.com/wit/gui"
|
||||||
|
|
||||||
|
@ -31,15 +35,11 @@ const (
|
||||||
CONN_PROTO = "tcp"
|
CONN_PROTO = "tcp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func socketToWIT() {
|
func socketToWIT(myhostname string) {
|
||||||
remoteAddr := CONN_HOST + ":" + CONN_PORT
|
remoteAddr := CONN_HOST + ":" + CONN_PORT
|
||||||
log.Println("remoteAddr:", remoteAddr)
|
log.Println("remoteAddr:", remoteAddr)
|
||||||
|
|
||||||
// localAddr := "librem15.lab.wit.com" + ":" + CONN_PORT
|
localTCPAddr := dnssecsocket.ResolveIPv6hostname(myhostname)
|
||||||
localAddr := "[2604:bbc0:3:3:0:10:0:1003]" + ":" + CONN_PORT
|
|
||||||
log.Println("localAddr:", localAddr)
|
|
||||||
|
|
||||||
localTCPAddr, err := net.ResolveTCPAddr("tcp", localAddr)
|
|
||||||
remoteTCPAddr, err := net.ResolveTCPAddr("tcp", remoteAddr)
|
remoteTCPAddr, err := net.ResolveTCPAddr("tcp", remoteAddr)
|
||||||
|
|
||||||
// connect to this socket
|
// connect to this socket
|
||||||
|
@ -51,22 +51,33 @@ func socketToWIT() {
|
||||||
log.Println("socket connect failed. Not sure what to do here. os.Exit() ?")
|
log.Println("socket connect failed. Not sure what to do here. os.Exit() ?")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
log.Println("socket connected to", CONN_PROTO, CONN_HOST, CONN_PORT)
|
log.Println("socket connected to", CONN_PROTO, CONN_HOST, CONN_PORT)
|
||||||
|
|
||||||
|
fmt.Fprintf(conn, myhostname + "\n")
|
||||||
|
|
||||||
|
connStdin, _ := conn.File()
|
||||||
|
|
||||||
|
go nonBlockingReader(connStdin, os.Stdout)
|
||||||
|
|
||||||
// read in input from stdin
|
// read in input from stdin
|
||||||
reader := bufio.NewReader(os.Stdin)
|
reader := bufio.NewReader(os.Stdin)
|
||||||
|
|
||||||
fmt.Fprintf(conn,"librem15.lab.wit.com\n")
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
fmt.Print("Text to send: ")
|
fmt.Print("Text to send: ")
|
||||||
text, _ := reader.ReadString('\n')
|
text, _ := reader.ReadString('\n')
|
||||||
// send to socket
|
// send to socket
|
||||||
fmt.Fprintf(conn, text + "\n")
|
fmt.Fprintf(conn, text + "\n")
|
||||||
|
a, err := connStdin.Write([]byte(string(text + "\n")))
|
||||||
|
if (err != nil) {
|
||||||
|
fmt.Println("SOCKET DIED with err=", err, a)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// TODO: check the socket has died and exit here
|
||||||
|
}
|
||||||
|
/*
|
||||||
// listen for reply
|
// listen for reply
|
||||||
|
|
||||||
newStdin, _ := conn.File()
|
|
||||||
newreader := bufio.NewReader(newStdin)
|
newreader := bufio.NewReader(newStdin)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
@ -78,6 +89,7 @@ func socketToWIT() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
func retrySocket() {
|
func retrySocket() {
|
||||||
|
@ -85,6 +97,36 @@ func retrySocket() {
|
||||||
log.Println("Sleep for 1 seconds, then try to establish connection to WIT")
|
log.Println("Sleep for 1 seconds, then try to establish connection to WIT")
|
||||||
time.Sleep(1 * 1000 * 1000 * 1000)
|
time.Sleep(1 * 1000 * 1000 * 1000)
|
||||||
// for now, loop until I figure out what to actually do
|
// for now, loop until I figure out what to actually do
|
||||||
socketToWIT()
|
socketToWIT("librem15.lab.wit.com")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// pass in two file handles (1 read, 1 write)
|
||||||
|
func nonBlockingReader(readFileHandle *os.File, writeFileHandle *os.File) {
|
||||||
|
// create a nonblocking GO reader
|
||||||
|
newreader := bufio.NewReader(readFileHandle)
|
||||||
|
nbr := nbreader.NewNBReader(newreader, 1024)
|
||||||
|
|
||||||
|
for {
|
||||||
|
defer readFileHandle.Close()
|
||||||
|
defer writeFileHandle.Close()
|
||||||
|
totalCount := 0
|
||||||
|
for {
|
||||||
|
oneByte := make([]byte, 1024)
|
||||||
|
count, err := nbr.Read(oneByte)
|
||||||
|
if (err != nil) {
|
||||||
|
log.Println("count, err =", count, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
totalCount += count
|
||||||
|
if (count == 0) {
|
||||||
|
time.Sleep(20 * time.Millisecond) // only check the buffer 500 times a second
|
||||||
|
if (totalCount != 0) {
|
||||||
|
log.Println("totalCount = ", totalCount)
|
||||||
|
totalCount = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
writeFileHandle.Write([]byte(string(oneByte)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue