Browse Source

keep track of whether sockets are closed

tags/v0.1.0
Jeremy Latt 10 years ago
parent
commit
4ce4ba31c5
2 changed files with 17 additions and 5 deletions
  1. 2
    5
      irc/client.go
  2. 15
    0
      irc/socket.go

+ 2
- 5
irc/client.go View File

@@ -264,11 +264,8 @@ func (client *Client) ChangeNickname(nickname Name) {
264 264
 	}
265 265
 }
266 266
 
267
-func (client *Client) Reply(reply string, args ...interface{}) {
268
-	if len(args) > 0 {
269
-		reply = fmt.Sprintf(reply, args...)
270
-	}
271
-	client.socket.Write(reply)
267
+func (client *Client) Reply(reply string) error {
268
+	return client.socket.Write(reply)
272 269
 }
273 270
 
274 271
 func (client *Client) Quit(message Text) {

+ 15
- 0
irc/socket.go View File

@@ -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
 	}

Loading…
Cancel
Save