]> kaliko git repositories - python-musicpd.git/blobdiff - mpd.py
Explicit R/W utf-8 encoded bytes to socket
[python-musicpd.git] / mpd.py
diff --git a/mpd.py b/mpd.py
index 4ad4804a23a17c1a384af068d8a287601d913ca7..b50442829cd05ebe94be831e2b4caacabcd5b36a 100644 (file)
--- a/mpd.py
+++ b/mpd.py
@@ -236,6 +236,7 @@ class MPDClient(object):
     def _read_line(self):
         line = self._rfile.readline()
         if not line.endswith("\n"):
+            self.disconnect()
             raise ConnectionError("Connection lost while reading line")
         line = line.rstrip("\n")
         if line.startswith(ERROR_PREFIX):
@@ -414,7 +415,7 @@ class MPDClient(object):
                 if sock is not None:
                     sock.close()
         if err is not None:
-            raise err
+            raise ConnectionError(str(err))
         else:
             raise ConnectionError("getaddrinfo returns an empty list")
 
@@ -425,8 +426,8 @@ class MPDClient(object):
             self._sock = self._connect_unix(host)
         else:
             self._sock = self._connect_tcp(host, port)
-        self._rfile = self._sock.makefile("r")
-        self._wfile = self._sock.makefile("w")
+        self._rfile = self._sock.makefile("r", encoding='utf-8')
+        self._wfile = self._sock.makefile("w", encoding='utf-8')
         try:
             self._hello()
         except:
@@ -434,9 +435,15 @@ class MPDClient(object):
             raise
 
     def disconnect(self):
-        self._rfile.close()
-        self._wfile.close()
-        self._sock.close()
+        if isinstance(self._rfile, socket._fileobject):
+            print('closing r socket')
+            self._rfile.close()
+        if isinstance(self._wfile, socket._fileobject):
+            print('closing w socket')
+            self._wfile.close()
+        if isinstance(self._sock, socket.socket):
+            print('closing socket')
+            self._sock.close()
         self._reset()
 
     def fileno(self):