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