issue 'use of closed network connection' of client fixed
This commit is contained in:
parent
6582ef79a5
commit
011c3253f7
@ -48,6 +48,7 @@ type Client struct {
|
||||
|
||||
jobhandlers map[string]JobHandler
|
||||
|
||||
isConn bool
|
||||
conn net.Conn
|
||||
addr string
|
||||
mutex sync.RWMutex
|
||||
@ -73,6 +74,7 @@ func New(addr string) (client *Client, err error) {
|
||||
if err = client.connect(); err != nil {
|
||||
return
|
||||
}
|
||||
client.isConn = true
|
||||
go client.inLoop()
|
||||
go client.outLoop()
|
||||
return
|
||||
@ -105,6 +107,9 @@ func (client *Client) readData(length int) (data []byte, err error) {
|
||||
// read until data can be unpacked
|
||||
for i := length; i > 0 || len(data) < common.PACKET_LEN; i -= n {
|
||||
if n, err = client.conn.Read(buf); err != nil {
|
||||
if !client.isConn {
|
||||
return nil, common.ErrConnClosed
|
||||
}
|
||||
if err == io.EOF && n == 0 {
|
||||
if data == nil {
|
||||
err = common.ErrConnection
|
||||
@ -193,7 +198,9 @@ func (client *Client) inLoop() {
|
||||
if err == common.ErrConnection {
|
||||
client.Close()
|
||||
}
|
||||
if err != common.ErrConnClosed {
|
||||
client.err(err)
|
||||
}
|
||||
break
|
||||
}
|
||||
job, err := decodeJob(rel)
|
||||
@ -358,6 +365,7 @@ func (client *Client) Echo(data []byte) (r []byte) {
|
||||
|
||||
// Close
|
||||
func (client *Client) Close() (err error) {
|
||||
client.isConn = false
|
||||
close(client.in)
|
||||
close(client.out)
|
||||
|
||||
|
@ -13,19 +13,20 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
ErrJobTimeOut = errors.New("Do a job time out.")
|
||||
ErrInvalidData = errors.New("Invalid data.")
|
||||
ErrWorkWarning = errors.New("Work warning.")
|
||||
ErrWorkFail = errors.New("Work fail.")
|
||||
ErrWorkException = errors.New("Work exeption.")
|
||||
ErrDataType = errors.New("Invalid data type.")
|
||||
ErrOutOfCap = errors.New("Out of the capability.")
|
||||
ErrNotConn = errors.New("Did not connect to job server.")
|
||||
ErrFuncNotFound = errors.New("The function was not found.")
|
||||
ErrConnection = errors.New("Connection error.")
|
||||
ErrNoActiveAgent = errors.New("No active agent.")
|
||||
ErrTimeOut = errors.New("Executing time out.")
|
||||
ErrUnknown = errors.New("Unknown error.")
|
||||
ErrJobTimeOut = errors.New("Do a job time out")
|
||||
ErrInvalidData = errors.New("Invalid data")
|
||||
ErrWorkWarning = errors.New("Work warning")
|
||||
ErrWorkFail = errors.New("Work fail")
|
||||
ErrWorkException = errors.New("Work exeption")
|
||||
ErrDataType = errors.New("Invalid data type")
|
||||
ErrOutOfCap = errors.New("Out of the capability")
|
||||
ErrNotConn = errors.New("Did not connect to job server")
|
||||
ErrFuncNotFound = errors.New("The function was not found")
|
||||
ErrConnection = errors.New("Connection error")
|
||||
ErrNoActiveAgent = errors.New("No active agent")
|
||||
ErrTimeOut = errors.New("Executing time out")
|
||||
ErrUnknown = errors.New("Unknown error")
|
||||
ErrConnClosed = errors.New("Connection closed")
|
||||
)
|
||||
func DisablePanic() {recover()}
|
||||
|
||||
|
@ -63,7 +63,8 @@ func TestJobs(t *testing.T) {
|
||||
defer c.Close()
|
||||
|
||||
c.ErrHandler = func(e error) {
|
||||
t.Error(e)
|
||||
// t.Error(e)
|
||||
t.Log(e)
|
||||
}
|
||||
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user