--- /dev/null
+"""Socket objects for the MUFF Engine"""
+
+# Copyright (c) 2005 mudpy, Jeremy Stanley <fungi@yuggoth.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+import socket
+
+import muff
+for module in muff.__all__:
+ exec("import " + module)
+
+def check_for_connection(newsocket):
+ try:
+ connection, address = newsocket.accept()
+ except:
+ return None
+ print "Connection from", address
+ connection.setblocking(0)
+ user = muffuser.User();
+ user.connection = connection
+ user.address = address[0]
+ return user
+
+def initialize_server_socket():
+ newsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ newsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ newsocket.bind((muffconf.config_data.get("network", "host"), muffconf.config_data.getint("network", "port")))
+ newsocket.setblocking(0)
+ newsocket.listen(1)
+ print "Waiting for connection(s)..."
+ muffvars.newsocket = newsocket
+
+def destroy_all_sockets():
+ print "Closing remaining connections..."
+ for user in muffvars.userlist:
+ user.connection.close()
+