diff --git a/client.go b/client.go index 1f2dd8a..9668676 100644 --- a/client.go +++ b/client.go @@ -10,24 +10,27 @@ import ( type Mbclient struct { transactionCounter uint16 - conn net.Conn + address string header [7]byte unit uint8 } func New(address string, unit uint8) (*Mbclient, error) { - var err error c := new(Mbclient) - c.conn, err = net.Dial("tcp", address) - if err != nil { - return nil, err - } + c.address = address c.unit = unit return c, nil } func (m *Mbclient) ReadRegisters(first uint16, numRegs uint16) ([]uint16, error) { + + conn, err := net.Dial("tcp", m.address) + if err != nil { + return nil, err + } + defer conn.Close() + const requestLength = 12 m.transactionCounter++ req := make([]byte, requestLength) @@ -41,21 +44,21 @@ func (m *Mbclient) ReadRegisters(first uint16, numRegs uint16) ([]uint16, error) req[7] = 3 //FunctionCode binary.BigEndian.PutUint16(req[8:10], first-1) binary.BigEndian.PutUint16(req[10:12], numRegs) - m.conn.SetDeadline(time.Now().Add(10 * time.Second)) - byteswritten, err := m.conn.Write(req) + conn.SetDeadline(time.Now().Add(10 * time.Second)) + byteswritten, err := conn.Write(req) if err != nil { return nil, err } if byteswritten != requestLength { return nil, fmt.Errorf("Failed to send request") } - m.conn.SetDeadline(time.Now().Add(10 * time.Second)) - _, err = io.ReadFull(m.conn, m.header[:]) + conn.SetDeadline(time.Now().Add(10 * time.Second)) + _, err = io.ReadFull(conn, m.header[:]) responseHeader.unMarshal(m.header) expectedDataLength := responseHeader.length - 1 response := make([]byte, expectedDataLength) - _, err = m.conn.Read(response) + _, err = conn.Read(response) err = mbpayload.unMarshal(response) if mbpayload.functionCode != 3 {