aboutsummaryrefslogtreecommitdiff
path: root/tde/tde.go
diff options
context:
space:
mode:
Diffstat (limited to 'tde/tde.go')
-rw-r--r--tde/tde.go42
1 files changed, 26 insertions, 16 deletions
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
}