From 24d1fba7c5eee9bf8cfd4bd45dcd2127042795c2 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 23 Jul 2015 16:21:46 +0200 Subject: Implement io.ReadWriter --- tde/tde.go | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) (limited to 'tde') diff --git a/tde/tde.go b/tde/tde.go index 9413f09..664778d 100644 --- a/tde/tde.go +++ b/tde/tde.go @@ -4,36 +4,46 @@ import ( "encoding/binary" "log" "net" + "io" ) +type TDE struct { + net.Conn +} + var nbo = binary.BigEndian // Network Byte Order -func Send(c net.Conn, b []byte) { - size := int16(len(b)) - if err := binary.Write(c, nbo, size); err != nil { - log.Fatal(err) +func (t TDE) Write(p []byte) (n int, err error) { + size := int16(len(p)) + if err := binary.Write(t.Conn, nbo, size); err != nil { + return 0, err } - if err := binary.Write(c, nbo, b); err != nil { - log.Fatal(err) + if err := binary.Write(t.Conn, nbo, p); err != nil { + return 0, err } + return int(size), nil } -func Recv(c net.Conn) (b []byte) { +func (t TDE) Read(p []byte) (n int, err error) { var size int16 - if err := binary.Read(c, nbo, &size); err != nil { - log.Fatal(err) + if err := binary.Read(t.Conn, nbo, &size); err != nil { + return 0, err + } + if int(size) < len(p) { + p = p[:size] + err = io.EOF } - b = make([]byte, size) - if err := binary.Read(c, nbo, b); err != nil { - log.Fatal(err) + if err := binary.Read(t.Conn, nbo, p); err != nil { + return 0, err } - return + log.Println(err) + return int(size), err } -func Dial(service string) net.Conn { +func Dial(service string) (TDE, error) { conn, err := net.Dial("tcp", service) if err != nil { - log.Fatal(err) + return TDE{}, err } - return conn + return TDE{conn}, nil } -- cgit v1.2.3