Regarding the socket error:
It looks to me like the problem is that the when a client disconnects uncleanly (i.e. crashes or is killed), the socket is already disconnected when the server finds out about the crash. The server then tries to disconnect the socket, and fails because the socket is already disconnected. The patch attached to this message should fix this by making sure the socket is still connected before trying to disconnect it.
Please note that while I have compiled and run a RunUO 2.0 server with this patch applied on mono 1.9.1, I have
not had a chance to connect to the server as of yet. This means that the patch is basically
untested, other than the fact that it compiles. Also note that since I haven't tested crashing a client with or without the patch applied, it may not even fix the problem.
If one of you folks wants to be brave and see if this patch fixes the problem for you, then please do. Once I get my server configured a bit better, I'll test it more fully myself.
To apply the patch, simply unzip the attached file in the root of your runuo installation and run the following command (as the user you normally use to run RunUO):
patch -p0 < runuo-300-mono-191-netstate.patch
Then just rebuild runuo.exe and run it as usual.
One last thing to be aware of: This is a
core modification, with all the potential problems associated with it. If you choose to use it, you do so
at your own risk. I take no responsibility if it completely borks your computer, your shard, or whatever.
-----------------------
Now, on to the Too many open files error (assuming custom scripts are involved in this one):
I don't know myself how to fix this, since I don't know what all scripts and/or core mods are involved, and even then, I may not really be experienced enough with C# or the scripts in question to find or fix the error.
To fix this error you need to go through all of your custom scripts and core modifications and make sure that any files/sockets they use are getting closed properly when the script is done with them, even if an exception occurs while the file/socket is open (use try/catch to deal with this). If you find that your scripts are closing files properly when they're through with them, then the scripts may simply be opening too many files/sockets at once and causing your system to run out of available files/sockets (I think there's a way to increase the number of available sockets on a linux system, but I don't remember what it is offhand).
Hope this helps some folks.
--Arek