# HG changeset patch
# User Matthew Wild <mwild1@gmail.com>
# Date 1255525934 -3600
# Node ID 64538c62045083820535be6c81b1070fa72f29b3
# Parent  a1d186c8c65aa5599aa1e36f70a0c406898fa628# Parent  4a15b176fca8dfe475b16064742323d75fe39f42
Merge with 0.5

diff -r a1d186c8c65a -r 64538c620450 net/server.lua
--- a/net/server.lua	Tue Oct 13 11:13:52 2009 +0100
+++ b/net/server.lua	Wed Oct 14 14:12:14 2009 +0100
@@ -371,18 +371,20 @@
                 send( socket, table_concat( bufferqueue, "", 1, bufferqueuelen ), 1, bufferlen )    -- forced send
             end
         end
-        if not handler then return true; end
-        _ = shutdown and shutdown( socket )
-        socket:close( )
-        _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
-        _socketlist[ socket ] = nil
+        if socket then
+          _ = shutdown and shutdown( socket )
+          socket:close( )
+          _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
+          _socketlist[ socket ] = nil
+          socket = nil
+        else
+          out_put "server.lua: socket already closed"
+        end
         if handler then
             _writetimes[ handler ] = nil
             _closelist[ handler ] = nil
             handler = nil
         end
-        socket = nil
-        --mem_free( )
 	if server then
 		server.remove( )
 	end
diff -r a1d186c8c65a -r 64538c620450 net/xmppserver_listener.lua
--- a/net/xmppserver_listener.lua	Tue Oct 13 11:13:52 2009 +0100
+++ b/net/xmppserver_listener.lua	Wed Oct 14 14:12:14 2009 +0100
@@ -100,6 +100,9 @@
 			end
 		end
 		session.sends2s("</stream:stream>");
+		if sesson.notopen or not session.conn.close() then
+			session.conn.close(true); -- Force FIXME: timer?
+		end
 		session.conn.close();
 		xmppserver.disconnect(session.conn, "stream error");
 	end