compteur since may 8th 2002

 Some 'lugdunum' servers
Razorback 2.0 1.150.000 users
Razorback 2.1 1.150.000 users
AIDA 1 900.000 users
AIDA 2 400.000 users
AIDA 3 400.000 users
Gruk Server List

 Our server
Techniques de son succès
Bloc d'adresses IP Fr


 L'ID du donkey
Comment le récupérer
Son attribution
Qui provoque un Low ID ?

 Connection sharing
Win XP
Win 98SE / Win Me
Win 2000
infos partages connexions

 Router configurations
Alcatel Pro
Asante FriendlyNet Câble/DSL FR3004
Bewan LanBooster
Cisco utilisant le NAT
Cisco PIX firewall
Eicon Diva ISDN
NetGear RP114
Netopia Rxxx
Zyxel Prestige 310
Autres routeurs
infos routeurs

Linux 2.2
Linux 2.4 et Shorewall
NetBSD 1.5.2
infos passerelles

Foro oficial del edonkey en español
The Donkey Network
Forum Edonkey 2000fr

Créé par Interfaces Web

Building an efficient edonkey server on linux/FreeBSD/Win32

You will find here usefull information about our edonkey/emule servers.
Old kiten page contains infos about my previous patches on dserver.
Norman and IhmSelbst made a German translation of this page, available on serverboard.

The current version of the eserver is 17.14. Server operators should upgrade their server to this last version: We live in a hostile world...

It is currently available for linux, windows, and several Unixes.
Many thanks to bluecow and other emule dev for the work done together :
eMule0.30b uses the new server protocol (zlib, jumbo UDP frames).
eMule0.30d groups several GetSources on one TCP message.
eMule0.42e uses the 'complete' feature of 16.45
eMule0.44a is Unicode ready.
eMule0.46a uses the extended getsources protocol to avoid file size mismatches.
eMule0.46b added the 'related search' command.
eMule0.47a should send FILERATING tags to servers.
eMule0.47a handles big files (>4GB)

Metamachine edonkey was updated in 1.4.3 version to use all the new goodies too (but not big files)

How to download and install it :
$ wget http://lugdunum.shortypower.org/files/eserver-17.14.i686-linux.gz
$ wget -O ipfilter.srv http://lugdunum.shortypower.org/files/ipfilter.srv
$ gzip -d eserver-17.14.i686-linux.gz
$ chmod 755 eserver-17.14.i686-linux
$ rm -f eserver
$ ln -s eserver-17.14.i686-linux eserver

Options :
Please keep in mind that if you use ipfilter.dat, you should take care of frequent updates of this file.
$ wget -N http://emulepawcio.sourceforge.net/nieuwe_site/Ipfilter_fakes/ipfilter.dat
$ wget -N http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip
$ unzip ip-to-country.csv.zip

The eserver needs a configuration file, called donkey.ini, that should be located in the current directory.

This configuration file is compatible with the original dserver, take a look at the MetaMachine page

The bare minimum donkey.ini file should contains :
name=my server name
desc=the desc of my server
thisIP= # The IP of my server
port=4232 # the TCP port (default is 4661, but it is wise to choose another value)

To run the eserver, I highly suggest to use the screen command, because the eserver has a text console, where commands may be entered.

The server cannot run as a service (daemon).

To let it restarts automatically in case of a failure, I also suggest to use a shell script like this one :
# script.sh file
ulimit -n 1000000
while :
sleep 1

When the script.sh file is ready, just do a "chmod +x script.sh" once to make it executable.

Then to start the eserver :
screen -d -m ./script.sh

To take control of it, type :
screen -r

new New in version 17.14 (Oct 21th 2006) :

  • Some changes in inter server communications. (less trafic)
  • Changes in size conflicts (when same hash but different sizes are given)
  • Related search is extended. A client can give several hashes in the related search request.
  • A new maxbuffer setting is introduced, to limit ram usage when some network congestion happens.

New in version 17.13 (Sep 10th 2006) :

  • Obfuscation Protocol (from eMule0.47b) : Not really cryptography but still... Both TCP sessions and UDP messages may be obfuscated to evade some filtering or sniffing.

New in version 17.12 (Aug 5th 2006) :

  • Bug fixes
  • 'Related Searches' were screwed up in 17.11
  • One nasty (but rare) bug (introduced by the big changes in 17.11) could lead to crashes.
  • Better support of ed2khistory

New in version 17.11 (May 29th 2006) :

New in version 17.10 (April 12th 2006) :

  • Hotfix : Under some circumstances, a Publish packet could make eserver crash and eventually produce a core dump (exact details not given here for obvious reasons)
  • A new index layout permits to save about 12 bytes of memory for each unique file. It also speedup searches.
  • gcc-4.1.0

New in version 17.9 (January 20th 2006) :

  • Hotfix : a search bug was introduced in 17.8

New in version 17.8 (January 19th 2006) :

  • Support of big files in ed2k network (size > 4GB), but clients need emule 0.47a. Old clients are still supported.
  • Ignores old eservers (versions < 17.6)

New in version 17.7 (September 16th 2005) :

  • Support searches for multiple file extensions, support not or ! operator too in file extension (like "zip,rar,cbz,cbr" or "!wme,!wma" or "not wme")
  • Network bandwidth : less pings are sent to clients (take into account data received from client, that let us know their socket is still alive)
    (take also into account lowidcallback sent to lowid clients : piggyback in the same tcp packet a 'ping' packet)
  • Ignores old eservers (versions < 17.5)
  • zlib-1.2.3

New in version 17.6 (August 5th 2005) :

  • FILERATING feature support. Users can score each file with a value from 1 (very bad) to 5 (excellent). Servers are able to give average values for the FILERATINGS in search results. Next versions of emule and shareaza should use this feature.
  • Ram usage is bigger than previous versions because of FILERATING handling, by a factor of 4 %, server admins should consider checking the user/file limits.
  • AMD64 special 64bits version (use of !3DNOW instructions for better performance), wont run on EMT64 Intel cpus.
  • Ignores old eservers (versions < 17.4)
  • edonkey lowid clients must use edonkey 1.4.3 (or newer version)
  • gcc 4.0.1 compiler.
  • A country tag added to server.met (cosmetic)

New in version 17.5 (July 10th 2005) :

  • Ability to perform related searches : Syntax is related::<hash> or related:<size>:<hash>, or use emule 0.46b for a right click on a file -> related search.
  • A related search gives the files that are the most published by the clients who share the given file. It can be used to detect related files, but also anomalies in files distribution.
  • Support for emulecollection file type, introduced in emule 0.46b
  • Security fix : zlib (patch to fix bug CAN-2005-2096)

New in version 17.4 (May 18th 2005) :

  • Ability to perform exact searches : Clients can enclose words in ' or " (next emule version needed for ") . Examples : 'blank & john' OR 'the the'
  • Keep low file descriptors available to speedup file descriptors allocation on Linux.
  • Some too frequent words are not indexed to save memory.
  • Ignores old eservers (versions < 17.3)
  • gcc 4.0 compiler
  • Some bugfixes (a segmentation violation could occur in some rare cases)

New in version 17.3 (February 15th 2005) :

  • ZLIB updated to zlib-1.2.2 : Previous versions are vulnerable to a Denial Of Service condition.
  • Make sure the size of a published file matches the known file size. A lot of buggy or malicious clients try to mislead the network.
  • Change the ed2k protocol to let clients tell us the size of the files they are downloading, not only the hash.
  • Semicolumn ; is a word separator in filenames.
  • Some assembly code (for x86, 32bits and 64bits) to speedup searches.
  • Sends CT_EMULE_VERSION tag in the Hello frame to save one packet (EMULEINFO) sent by eMule.

New in version 17.2 (January 5th 2005) :

  • Some worms or anti2p2 robots open *lot* of connections to servers, wanting to fill their memory with useless data. We now limit the number of clients sharing one IP. A new max_clients_per_ip parameter can control this limit.
  • Bug correction on Searches specifying Video, Audio, ... types (not Any)
  • Bug correction on community feature.

New in version 17.1 (December 1st 2004) :

  • Unicode Support : The majority of clients uses UTF-8 encoded filenames when publishing files, this is time to switch to Unicode.

  • Unicode Support : Limited Support for uppercase/lowercase & accents (#U00C0 to #U00FF).

  • Unicode Support : On fly conversion of CP949 (Korean Code Page / locale) encoded strings to UTF-8

  • Unicode Support : Support of Uppercase/Lowercase Cyrillic chars (#U0410 to #U044F)

  • Searches results can give a new tag : #LASTSEEN, that contains the number of seconds since the last 'complete publisher' of the file left the server.

  • Support of the ip-to-country.csv file, to be able to send welcome.xx (country specific) files instead of the welcome[] messages. You may reload the file with "loadipcountry ip-to-country.csv" eserver command.

  • Support of the new ed2khistory service. (The server maintains a #ASKED counter for each file)

  • Saves one TCP packet when connecting to the client port for HighID test.

  • Intercepts HTTP requests sent to the eserver port (display a user friendly page, giving the IP). See http_trace parameter.

  • Razorback2 server can host more than 900.000 clients.

New in version 16.49 (August 30th 2004) :

  • Bug correction on ia32 linux versions (32bits). Some searches were incorrectly handled. This bug was introduced in 16.46

New in version 16.48 (August 20th 2004) :

  • When a connection was blacklisted the message "ERROR : Connection refused. Your IP is currently blacklisted." was not sent properly.

  • Bug correction on ipfilter.dat handling. Some netranges were ignored.

  • A flush of socket buffers was added to save some kernel memory for sockets in CLOSE-WAIT state.

New in version 16.47 (July 19th 2004) :

  • Searches improvements.

  • Protection against shareaza misuse of servers. Shareaza users should upgrade to shareaza at least.

  • Protection against old amule/xmule/edonkey programs that pretend to be zlib compatable but forget to compress data sent to servers. edonkey users should upgrade to v 1.0 or better

  • Protection against fake clients. If you want to check how fake clients infect your eserver, type this command in eserver console : "vc"

  • ipfilter.dat support to clean servers from known IP ranges used by anti p2p companies. Server admin might use a custom file in current directory or the Pawcio one :
    The file can be reloaded with this eserver command : "loadipfilter ipfilter.dat"

New in version 16.46 (April 26th 2004) :

  • Protocol enhancement : Tags compression. Should be used by eMule 0.42f, to reduce bandwidth and compressions requirements.

  • Support for searches by files hashes. It accepts several links (ed2k://|file|name|size|Hash), (ed2k:size:Hash), (magnet:?xt=ed2k:Hash), ...

  • Searches optimizations : Searches uses half the CPU they were using in previous version.

  • Bug correction : A bug was introduced in 16.45 and is now corrected.

  • Note for WIN32 users : Use a auxportslist line in your donkey.ini to avoid a CPU loop in eserver.

New in version 16.45 (March 31th 2004) :

  • Tuning for multiprocessors machines (SMP) : TCP worker threads (see tcpthreads param) and fine grained locks to reduce lock contention.

  • Port to x86_64 linux (AMD64, and perhaps Intel IA32E too in a near future), eserver is a native 64bits programm, able to use 32 GB of ram.

  • Razorback server (dual Opteron, 6 GB memory) handled 600.000 clients with this version.

  • Some too common keywords are not indexed to save ram (avi,jpg,the,avi,zip,rar,mpg), but searches continue to work as before.

  • A new schem (chunks) is used to store sources (10 bytes per 'file' instead of 16). (Thanks to tecinv & Lobuz from emule forum for giving me the hint.)

  • A new memory managment to avoid heap fragmentation, and a new hugefile2 param.

  • A new feature : COMPLETE file. Updated clients (eMule 0.42e) can at publish time tell if the file they share is complete or not. Searches results include this new information.

  • The letter ñ is an alias to n letter in searches. A search of 'espana' know matches 'españa'

  • Server can listen to auxiliary TCP ports to avoid some Internet providers filters, see auxportslist param.

  • Default jigle IP changed to (yes, we know it is actually off)

  • A new opIP parameter to permit to the server operator to use an ed2k client too.

  • ZLIB upgraded to 1.2.1 version.

  • A port to IBM S390 architecture (linux powered).

New in version 16.44 :

  • Adding TCP_QUICKACK and TCP_DEFER_ACCEPT facilities for linux. See documentation of quickack and defer_accept new parameters.
  • The maxnozlib parameter can give some priority for zlib clients at login time.
  • A new dedicated thread does the Unpublish operations when clients disconnects. Network failures dont freeze the server anymore.
  • Better Multi Processor use. (but not yet perfect : will be fixed in 16.45)
  • Detection of bad behavior of LOWID clients that ask Callbacks to other LOWID clients. (emule BUG, corrected in 0.30d)
  • Implement the OVERNET BACKCALL that are sent to UDP port 4661.
  • Detection of bad frames sent on wrong ports (UDP 4669). (shareaza bugs, mldonkey, ...)
  • Detection of a shareaza bug, incorrectly mixing btih and ed2k protocol.
  • Adds support for UDP LOWID AskCall.
  • Memory savings (not indexing keywords of length < 3, see minkeylength param)
  • Some optimizations for Searches, and in other areas.
  • Port on machines having only select() and not poll(),epoll,kqueues,/dev/poll ( MAC OS X, Darwin 6)
  • Bugs fixes.
  • The new connIP parameter can be used to bind outgoing TCP sockets to a particular IP.
  • Server can write a server.met file automatically. See autoservlist parameter.
  • Some news about razorback : average UDP frame size is 27.2 bytes. The server is now able to handle 340000 users.

New in version 16.43 :

  • Yet another bug fix for Unix machines without epoll/poll/kevent, where standard poll() is used.

New in version 16.42 :

  • Bug fix for Unix machines without epoll/poll/kevent, where standard poll() is used.

New in version 16.41 :

  • Some news about razorback : 25% of its users use zlib compression, and average UDP frame size is 20.2 bytes instead of 17.8 one week ago.
  • A performance problem for machines without epoll was fixed. Thanks to Tim French for reporting the problem and providing an ssh access to his server.
  • A blackhole feature is integrated, and can drive an external daemon to add/delete some firewall rules : Some clients try to log on servers once per second. I've seen more than 10000 attempts coming from one client in one hour.
  • A whitelist feature to allow some IP or netrange used by some unfortunate NAT users... This is combined with a 'lowid only' list, that avoids backdoor test for well known lowid IP/netranges.
  • A new parameter (msgrandomport=true) can ask eserver to send messages to clients using the default 4662 port

New in version 16.40 :

  • Completely rewritten from scratch in C language. Very high performance expected (280k users on a 4Go ram linux machine)
  • WIN32 port (Using native asynchronous winsock calls : should get high performance too)
  • 64 bits target machines (IBM AIX V5.1, Tru64 5, HPUX 11, Solaris, linux x86_64, ...)
  • Extension of the UDP protocol to allow clients to ask sources for many MD4 hashes at once, instead of one UDP packet for each MD4. (should reduce UDP traffic by a 2 or 3 factor)
  • Clients using the new protocol gets more sources than other clients.
  • Extension of the UDP protocol to send many Search results per packet.
  • zlib support to compress big frames exchanged with clients (share lists, search results)
  • Support of files > 2Go
  • Support of FreeBSD kqueue (FreeBSD equivalent of linux epoll)
  • Support of Solaris/HPUX /dev/poll
  • Ability to perform a search with MD4Hash (to retrieve associated tags of a file (NAME, SIZE, TYPE, ...)
  • Better server list handling.
  • Tracking of too old emule versions.
  • keepalive pings are most of the time piggybacked into other services messages : lower TCP bandwidth (using less IP packets)
  • Adaptative ping delays, to try to help NAT users (that have too low idle timeouts)
  • ...many more addons...

donkey.ini documentation :

You can list all the available parameters and their current values by issuing this eserver command :
All these params can be changed in the donkey.ini file, and many of them can be changed dynamically, in the eserver console.
Note : boolean values can be false, true, 1, or 0.

LOWIDenable (integer) (should be boolean in next version)
If 1, LOWID users can login. Default value : 1

LOWIDpercent (integer)
Maximum percentage of LOWID users. Warning : having too many LOWID logged in a server is a bad idea, since nobody can get sources. I suggest not having more than 33% of LOWID users. Default value : 20

autoservlist (pathname)
If set, the server can write a server.met file , with only working known servers, every 225 seconds (approx). Default value : none

auxportslist (list of ports values)
New in 16.45
The server can listen to auxiliary tcp ports. This is to help some users to avoid providers filters that block standard wellknown ports (4661,4242). Default value : none
Only updated clients may use aux ports, because we ask them not to spread aux ports values to other clients, because we dont want to receive additionnal UDP trafic.
This list may be modified dynamically.

bindUDPIP (IP address)
When a host has more than one IP, you can force the IP used by the UDP messages. This is usefull if the primary IP address of the machine is not the IP address of the server (thisIP).

blacktime (integer)
The number of seconds of blacktime : If a client IP is blacklisted (because of sending too many requests to the server), it stays in this blacklist for at least this time. Default value : 3600

blocsize (integer)
The number of bytes of the Unit of memory allocation. Dont change this value, as it is the size of a HugeTLB page (4 Mbytes). Default : 4194304.

bverbose (boolean)
If true, the eserver logs (to the console and/or logfile) the blacklisted IP and 'double connections'. Default value : false

connIP (IP address)
When a server has more than one IP, you can use a second IP to bind the outgoing sockets, that the server use to check the LOWID/HighID capability of new clients. Using a different IP can defeat some bad clients that give false informations (Hash Stealers)

console (boolean)
When the eserver prints a message, it is sent to the console if the console flag is 'true', and/or to the log file is logFile flag is 'true'. Default value : true

dcache_line (integer)
This controls the alignment of memory blocks that eserver users to store file descriptions. Trying to use the L1 cache size of the CPU helps the performance. The L1 cache size of PII & PIII is 32 bytes. For Athlons and P4, this is 64 bytes. Default value : system dependant.

defer_accept (integer)
The linux kernel has a TCP_DEFER_ACCEPT feature, that delay the accept() of a new TCP stream. The listening application is notified of a new connection only after some data were received on it. The defer_accept parameter is the max delay between the connection establishment and the first data. Default value : 10 seconds.

desc (string)
This is the description of the server. This string is sent to the clients. Default value : eserver

filter[] (filter expression)
Setup a filter that is applied to files published by clients. Please refer to the dserver documentation for details.
Example of filters :
filter[2]=(#FORMAT met)
filter[3]=(#FORMAT part)
filter[4]=(#FORMAT dll)|(#FORMAT sys)

fwcommand (pathname)
Introduced in 16.41, this parameter gives the name of a file. This file is updated when the eserver detects that a client loops on the login process.
When an IP is added to the 'bad list', a line like this one is added :
Wed Oct 8 16:07:06 2003 DENY
When the server thinks the client can be accepted again :
Wed Oct 8 16:07:06 2003 ACCEPT

You can use this file with a daemon that reads new records from this file, and issue some iptables/ipfw/whatever commands.

Example for iptables on linux :

At init time, (firewall setup) initialize the SYN chain and insert it in the INPUT chain, for SYN TCP packet only
iptables -N SYN
iptables -I INPUT -p tcp --dport 4661 --syn -j SYN

When the eserver or the daemon is restarted, flush the rules in SYN chain:
iptables -F SYN
Then, when a 'DENY' is emitted by eserver, add a rule in the chain :
iptables -I SYN -s the_IP -j DROP
When a 'ACCEPT' is emitted by eserver remove the rule :
iptables -D SYN -s theIP -j DROP
You may want to play with clever iptables module, like RECENT, that are faster when the number of IP is high (hashtable instead of list).

hardLimit (integer)
If a client tries to publish more than hardLimit files, the server disconnects him (before receiving the whole list). That is to save bandwidth, because some lazy people share all their files. Default value : 4000
See softLimit parameter description.

http_trace (boolean) (New in eserver 16.50)
When set to true, eserver logs HTTP requests to "loghttp" file. Default = false

hugefile (string)
(linux 2.6 only) : The path of a file located in a hugetlbfs file system. This allows eserver to try to allocate 4MB or 2MB Huge Pages instead of standard 4KB pages, to reduce hardware TLB misses. The normal page size on ia32 is 4Kbytes, which is way too small for a programm that has to use a huge amount of memory.
Dont bother with such advanced features for small servers.
Example of use :
Check your linux kernel config, you should have :
Then you can mount a hugetlbfs : (in a startup file, like /etc/rc.d/rc.local)
mkdir /huge
mount -t hugetlbfs none /huge
echo 100 >/proc/sys/vm/nr_hugepages

Then in donkey.ini add :

Note : On HPUX, Solaris, Windows2003, eserver tries to allocate big pages automatically.
On windows2003, the SE_LOCK_MEMORY priviledge should be granted to the user before starting eserver. If not, the server falls back to allocate normal memory (not 4MB big pages)

hugefile2 (string)
Since 16.45, the HugeTlb pages may be used for the heap storage too. (linux 2.6 only) : The path of a file located in a hugetlbfs file system.

jigleIP (IP address)
The IP address of jigle, to avoid blacklisting www.jigle.com. Default value :

listenIP (IP address)
The server can listen TCP connections to a specific address, instead of all IP of the host. Default value : Any address (

listen_backlog (integer)
The listen backlog. The eserver has a very high value, suitable for any servers, but you can change it. Default value : 1024
Note : On linux, you may want to check /proc/sys/net/ipv4/tcp_max_syn_backlog and /proc/sys/net/core/somaxconn : global system limits.

logFile (boolean)
If set to true, the server appends its message to the "log" file, located in the current directory. Default value : false

login_timeout (integer)
The value in seconds the server waits for the backdoor test to succeed. The backdoor test is a connection made by the server to the 4662 port of the client to check if it is a HighID or LOWID. Default value : 20

maxClients (integer)
The maximum number of clients for this server. Default value : 1024

max_clients_per_ip (integer)
Limits the number of clients sharing one IP. Default value : 12
This is to forbid some worms/virus/robots opening too many connections and fill the server.

max_frame_size (integer)
If a client send a frame with more than max_frame_size, the server disconnects it. Default value : 250000

max_slimit_nb_cell (integer)
This limits the maximum number of IP that slimit module can manage. Default value : 393216

max_string_size (integer)
This is the max size of a string. Some clients sends very long filenames. The server truncates too long strings. Default value = 140

maxSearchCount (integer)
This is the max number of answers given to a Search request (from a connected client) Default value = 200

maxSearchCountz (integer)
This is the max number of answers given to a Search request (from a connected zlib aware client) Default value = 300

maxUDPSearchCount (integer)
This is the max number of answers given to a Search request (from a not connected client) Default value = 20

maxVersion (integer)
A client software has a version number. Clients having a version greater than maxVersion are not allowed to login. Default value = 2000

maxnozlib (integer)
New in version 16.44. When the current number of users exceeds the maxnozlib value, only zlib aware clients are alowed to login. Default value = 250000

maxservers (integer)
Limits the maximal number of servers that this server can add in its list. To protect against some Denial Of Service attacks. Default value = 4096

maxstrangers (integer)
Used with the nickcommunity parameter. No more than 'maxstrangers' users not belonging to the community are allowed to login. Default value = 1000000

minEVersion (integer)
Used with the trackemule feature. Gives the minimum Emule version that this server allows. Emule version is a hexadecimal number between 00 and FF. Default value = 0x26

minVersion (integer)
A client software has a version number. Clients having a version lower than minVersion are not allowed to login. Default value = 59

minkeylength (integer)
Default value 3. This is the minimum length of a keyword. The server builds indexes on the keywords contained in the filenames, to be able to perform fast searches.
As indexes use a lot of ram, 16.44 server can ignore short words.

mmap_hint (integer)
A hint for the eserver to place its 4Mo pages in virtual memory space. Default value = 0 (no hint)
On ia32 linux, one can use mmap_hint=0x80000000
razorback uses 0x74000000

msgrandomport (boolean)
Some providers (ISP) are filtering 4662 port. To help users, it may be a good thing to ask them to change the 4662 value for something else.
If msgrandomport is true, the server automatically sends a warning message to users that uses the default port.
The MsgRandomport default value is : WARNING : Please try to use a random port instead of 4662, because a lot of ISP have filters on 4662 port. Any number between 80 and 65530 should be OK. Thanks

name (string)
The name of your server, as sent to clients. Default = eserver 16.44

nbuserIP (IP address)
The server has a special TCP listener on a port that allows nbuser to gather information. By default, the port is binded on (localhost) so that only a local nbuser can connect to eserver. You may want to allow extern access. Default value =

nbuserport (integer)
The port of the nbuser listener. See above. Default value = 5656

ncpus (integer)
This value is filled by eserver at startup, and gives the number of cpus of the host. Not really used by the programm. See udpsearchers. Default value = number of cpus of the host.

nickcommunity (string)
The tag that should be present in the nickname of users to be able to log in the server. Used with maxstrangers.
Note : You MUST enter a string in lowercase. (The clients can use upper/lower case). Default value : no value (public server)

nickname (string)
When performing a backdoor test to the 4662 port of client, the eserver impersonnate a user. This param is the nickname of the faked user. Default value = eserver

noepoll (boolean)
(linux only) If set to true, eserver doesnt try to use epoll feature. I strongly advise not doing that, but your linux version may have a bug on this function. Default value = false
For linux-2.4.21 or linux-2.4.22, you can try the patch from Davide Libenzi to add epoll feature.

opIP (IP address)
If the server operator wants to use a ed2k client and connect to his own server, he may have a problem because of a private IP. The opIP parameter asks the server to replace the client'IP by the listenIP/thisIP of the server. That way, when other client want to contact the operator, their incoming connections can be NATed to the operator.

noudpslowsearches (boolean)
You can deny to handle complex searches sent by remote users (clients of other servers). Complex searches are searches that must scan the whole file list, instead of using a keyword index. Default value = false

ping_delay (integer)
The server periodically sends a frame called a 'ping', containing the number of users and files he has, to each of its client. This is to verify each TCP socket is alive (Users may have switch off their computer). ping_delay is the maximal delay between such pings. Default value = 300 (was 400 before 16.49)

port (integer)
This is the TCP port that this server listens on. Default value = 4661
See also auxportslist

public (boolean)
If set to true, the server advertizes himself as a public server to other servers. This parameter had a role in the past, but is useless today because clients can automatically add servers to their list, when a client connects to them. Default value = false.

quickack (boolean)
If set to true, the server uses the setsockopt(TCP_QUICKACK) to ask the linux kernel to delay the TCP ACK packets, instead of enter in the quickack mode. This should reduce the bandwitdh. Default value = true.

search_trace (boolean)
If set to true, the server dumps to the logsearches file the searches requests handled. Default value = false

seedIP (IP address)
The IP address of another server. This is used by the eserver if no "serverList.met" file is present (or if it's empty), to gather a server list. Default value : none

seedPort (integer)
The port of the seed server. Default value = 4661

slimit_tableSize (integer)
The size of the hash table used in slimit module. Each slot uses 4 bytes of memory. Default value : 10007

softLimit (integer)
If a client tries to publish more than softLimit files, the server sends him a WARNING message and ignores files in excess. Default value : 1000
See hardLimit parameter description.

tableSize (integer)
The size of the hash table used to store file descriptions. You should not set it, since eserver dynamically increase it as needed.

tcpthreads (integer)
The number of worker threads to handle tcp requests (connected clients). See ncpus. May be dynamically changed in eserver console. Default value = number of cpus of the host.

tcp_rbuffersize (integer)
The TCP/IP stack of your machine allocates for each socket a maximum size to store incoming messages. You may want to change this default size.
Default value = 0 (system default)
(on linux check /proc/sys/net/ipv4/tcp_rmem)

tcp_xbuffersize (integer)
The TCP/IP stack of your machine allocates for each socket a maximum size to store outgoing messages. You may want to change this default size.
Default value = 0 (system default)
(on linux check /proc/sys/net/ipv4/tcp_wmem)

thisIP (IP address)
This is the IP of this Server. Note : eserver cannot find it automatically. You MUST set it correctly if your server is public.

threads (integer)
Obsolete parameter. The number of threads in eserver is fixed:
One thread receives UDP request.
One or two threads handle UDP searches. (See udpsearchers)
One thread accepts new incoming connections.
One thread handles the login phase of clients.
One thread handles the console dialog. (This is the 'main' thread)
One thread handles all the TCP traffic (requests from connected clients)
One thread handles the 'nbuser' requests.
One thread handles incoming connections to auxports.

trackbademule (integer)
A bitmask of flags. See minEVersion parameter. Default value = 30

trackemule (integer)
If set to 1, eserver tracks the emule version. Check also minEVersion parameter. Default value = 1

type (string)
Two values are possible :
key (default) : The server builds indexes based on keywords found on file names. Searches are fast.
substring : The server doesnt uses indexes. Searches are slower.

udp_rbuffersize (integer)
The UDP/IP stack of your machine allocates for each socket a maximum size to store incoming messages. You may want to change this default size. Default value = 0 (system default)

udp_xbuffersize (integer)
The UDP/IP stack of your machine allocates for each socket a maximum size to store outgoing messages. You may want to change this default size. Default value = 0 (system default)

udpsearchers (integer)
The number of threads dedicated to UDP searches. Default value : 1 on Uniprocessor machine, 2 on SMP machine.

verbose (boolean)
If set to true, the server logs some messages (clients login/lougout for example). Default value = false

warnfakes (integer) (New in 16.50)
Each time a client publishes a file that is present in fakes.txt, the server sends a warning message giving the name of offending file to the user. This parameter controls the max number of such messages. Default 0.

welcome[#] (string)
This is a series of messages that each client that logs on to the server will be sent.
New in 16.50 : If ip-to-country.csv file is used, the server checks if a file welcome.xx (where xx = country code of the incoming client) exists. If yes, the content of file is sent instead of the welcome[] from donkey.ini

zlib_complevel (integer)
level of compression done by this server. An integer between 0 (no compression) and 9 (max compression) . Default value = 9

zlib_enable (boolean)
Allows server to negociate zlib compression with incoming clients. Default : true

Format of fakes.txt file

This file is a text file, containing one fake description per line. Each line should start with a 32 hexadecimal digits (16 bytes) md4 hash of the file, followed by some comments and a line feed.

See also warnfakes parameter.

Linux Kernel tuning :

For big servers, dont forget to increase /proc/sys/fs/file-max. (default value 8192).
You can add (or modify if already present) this line to /etc/sysctl.conf :
You can also do : echo 16384 > /proc/sys/fs/file-max (but value is lost after a reboot)

On linux 2.2 machines, dont forget to change /proc/sys/net/ipv4/route/max_size, because a too low value can explain some problems.
echo 32768 > /proc/sys/net/ipv4/route/max_size
You may also change the linux 2.2 VM settings :
echo "1024 2048 4096" > /proc/sys/vm/freepages
Linux 2.2 has a limit on the poll() system call : Because it uses the kmalloc(nbhandles*8) kernel service, it has a limit of 16384 file handles. So a eserver running on a linux 2.2 machine can not have more than 16300 users.

Last advice : we suggest to launch the program with a script script.sh : It uses ulimit -n 8192 to change the maximum number of files a process can open. If you plan a 10000 users server, change this to 16384 !

For users wanting to run eserver as an ordinary user (not root), you may change /etc/security/limits.conf and add this lines :
* soft nofile 32768
* hard nofile 32768

Notes about other OS:

Tru64 Unix 5.1 : limit of 65536 file descriptor per process : A server can not handle more than 64k users.

HPUX 11 : maxfiles (see sysdef command) limit is 60000 : No more than 60.000 users.

FreeBSD : check the limits with sysctl command.
# sysctl kern.maxfiles
kern.maxfiles: 5000
# sysctl kern.maxfiles=65000
kern.maxfiles: 5000 -> 65000
# sysctl kern.maxfilesperproc
kern.maxfilesperproc: 4200
# sysctl kern.maxfilesperproc=65000
kern.maxfilesperproc: 4200 -> 65000