diff --git a/kmip/services/kmip_client.py b/kmip/services/kmip_client.py index 763ba386..7f72adf7 100644 --- a/kmip/services/kmip_client.py +++ b/kmip/services/kmip_client.py @@ -301,9 +301,10 @@ def __del__(self): self.close() def close(self): - # Close the socket. + # Shutdown and close the socket. if self.socket: try: + self.socket.shutdown(socket.SHUT_RDWR) self.socket.close() except (OSError, socket.error): # Can be thrown if the socket is not actually connected to diff --git a/kmip/services/server/server.py b/kmip/services/server/server.py index d0f05f6e..534ab61d 100644 --- a/kmip/services/server/server.py +++ b/kmip/services/server/server.py @@ -362,11 +362,12 @@ def stop(self): self._logger.info("Shutting down server socket handler.") try: + self._socket.shutdown(socket.SHUT_RDWR) self._socket.close() except Exception as e: self._logger.exception(e) raise exceptions.NetworkingError( - "Server failed to close socket handler." + "Server failed to shutdown socket handler." ) if hasattr(self, "policy_monitor"): diff --git a/kmip/services/server/session.py b/kmip/services/server/session.py index 81a718eb..c6a5f70c 100644 --- a/kmip/services/server/session.py +++ b/kmip/services/server/session.py @@ -113,6 +113,7 @@ def run(self): self._logger.info("Failure handling message loop") self._logger.exception(e) + self._connection.shutdown(socket.SHUT_RDWR) self._connection.close() self._logger.info("Stopping session: {0}".format(self.name))