|
@@ -12,6 +12,7 @@ const (
|
12
|
12
|
)
|
13
|
13
|
|
14
|
14
|
type Socket struct {
|
|
15
|
+ closed bool
|
15
|
16
|
conn net.Conn
|
16
|
17
|
scanner *bufio.Scanner
|
17
|
18
|
writer *bufio.Writer
|
|
@@ -30,11 +31,20 @@ func (socket *Socket) String() string {
|
30
|
31
|
}
|
31
|
32
|
|
32
|
33
|
func (socket *Socket) Close() {
|
|
34
|
+ if socket.closed {
|
|
35
|
+ return
|
|
36
|
+ }
|
|
37
|
+ socket.closed = true
|
33
|
38
|
socket.conn.Close()
|
34
|
39
|
Log.debug.Printf("%s closed", socket)
|
35
|
40
|
}
|
36
|
41
|
|
37
|
42
|
func (socket *Socket) Read() (line string, err error) {
|
|
43
|
+ if socket.closed {
|
|
44
|
+ err = io.EOF
|
|
45
|
+ return
|
|
46
|
+ }
|
|
47
|
+
|
38
|
48
|
for socket.scanner.Scan() {
|
39
|
49
|
line = socket.scanner.Text()
|
40
|
50
|
if len(line) == 0 {
|
|
@@ -53,6 +63,11 @@ func (socket *Socket) Read() (line string, err error) {
|
53
|
63
|
}
|
54
|
64
|
|
55
|
65
|
func (socket *Socket) Write(line string) (err error) {
|
|
66
|
+ if socket.closed {
|
|
67
|
+ err = io.EOF
|
|
68
|
+ return
|
|
69
|
+ }
|
|
70
|
+
|
56
|
71
|
if _, err = socket.writer.WriteString(line); socket.isError(err, W) {
|
57
|
72
|
return
|
58
|
73
|
}
|