Merge pull request #52 from fess932/master

fix read after tty close
diff --git a/tty_unix.go b/tty_unix.go
index 06f26ba..9446ec4 100644
--- a/tty_unix.go
+++ b/tty_unix.go
@@ -7,6 +7,7 @@
 	"bufio"
 	"os"
 	"os/signal"
+	"syscall"
 
 	"golang.org/x/sys/unix"
 )
@@ -64,18 +65,25 @@
 }
 
 func (tty *TTY) close() error {
-	if tty.out == nil {
+	if tty.out == nil || tty.in == nil {
 		return nil
 	}
+
 	signal.Stop(tty.ss)
 	close(tty.ss)
 	err1 := unix.IoctlSetTermios(int(tty.in.Fd()), ioctlWriteTermios, &tty.termios)
 	err2 := tty.out.Close()
+	err3 := tty.in.Close()
+
 	tty.out = nil
+	tty.in = nil
 	if err1 != nil {
 		return err1
 	}
-	return err2
+	if err2 != nil {
+		return err2
+	}
+	return err3
 }
 
 func (tty *TTY) size() (int, int, error) {
@@ -113,7 +121,10 @@
 	termios.Cflag |= unix.CS8
 	termios.Cc[unix.VMIN] = 1
 	termios.Cc[unix.VTIME] = 0
-	if err := unix.IoctlSetTermios(int(tty.in.Fd()), ioctlWriteTermios, termios); err != nil {
+	if err = unix.IoctlSetTermios(int(tty.in.Fd()), ioctlWriteTermios, termios); err != nil {
+		return nil, err
+	}
+	if err = syscall.SetNonblock(int(tty.in.Fd()), true); err != nil {
 		return nil, err
 	}