# mldonkey : Frequently Asked Questions

English , Deutsch , Francais o Espaņol

1. ### Background

1. What is mldonkey ?
2. Why use Objective-Caml to program mldonkey ?
3. Where can I find support on mldonkey ?
4. Where can I download mldonkey ?
5. Where can I find mldonkey for Windows ?
6. What's new with MLdonkey 2.00 ?

2. ### Running mldonkey

1. How should I start mldonkey ?
2. How can I control mldonkey ?
3. Where/what are mldonkey configuration files ?
4. How can I control the bandwidth used by mldonkey ?
5. When I modify an option in the config file, mldonkey overwrites it with its old value ?
6. Where are the files I have downloaded with mldonkey ?
7. Why does MLdonkey automatically pause some of my downloads ?
8. How can I reach mldonkey WEB interface if my firewall only allows port 80 ?

3. ### Running the GTK GUI

1. When I start the GUI, I get a lot of error messages, and the GUI terminates with a "Segmentation Fault" ?
2. I can't connect to mldonkey from a remote host, neither by telnet, WWW or the GUI ?
3. The GUI is immediatly disconnected from the core, or keeps connecting and disconnecting very fast ?

4. ### Building mldonkey

1. How can I download the latest sources of mldonkey ?
2. What do I need to compile mldonkey on my system ?
3. How do I compile mldonkey on my system ?
4. I just updated from CVS, and I get an error while compiling ?

5. ### The eDonkey plugin

1. What is the eDonkey network ?
2. Why can't mldonkey connect to any server ?
3. How can I import my old edonkey files under mldonkey ?
4. Where can I find files on eDonkey without searching on servers ?
5. Why does mldonkey only connect 5 servers, whereas `max_connected_servers` is greater ?
6. What's about Overnet ?
7. I'm behind a firewall, what should I do ?
8. How can I share multiple directories ?

6. ### The Soulseek plugin

1. What is the Soulseek network ?
2. I can't connect to the server ?

7. ### The LimeWire plugin

   1. What is the LimeWire network ?
   2. When I search for files, I receive unrelated results ?

8. ### The other plugins

   1. What is the current Development Status of mldonkey plugins ?

1. ## Background

   1. ### What is mldonkey ?

      Formerly, mldonkey was a Linux client for the eDonkey network, built from a reverse-engineered version of the protocol. Now, it is also able to connect to multiple networks (gnutella, Direct-Connect, Soulseek, etc).

      MLdonkey runs on most Unix clones: Linux (x86, alpha, sparc), Mac OS X, Solaris x86, Free/OpenBSD, etc.

      It runs as a daemon, in the background, that can run, downloading and sharing files, 24 hours a day. You can interact with your mldonkey daemon, either locally or remotely, by a telnet interface, a WEB interface or a GTK GUI. Other GUIs have also been created for mldonkey.

   2. ### Why use Objective-Caml to program mldonkey ?

      Most programmers associate functional languages with languages theory, lambda-calculus, recursivity, and non-mutable variables, ie the most boring lectures at university.

      Fortunately, Objective-Caml is not only a functional language: it also provides many other programming paradigms, such as imperative constructs (`while` and `for` loops, mutable variables, records), object-oriented constructs, and a powerful C-interface. Moreover, its native-code compiler carefully checks your program for typing errors (no more segfaults !), and produces a very efficient code (even faster than C on many examples).

      If you don't believe me, check the following links:

      - A comparison between many languages
      - Two Objective Caml programs win first and second prizes at the ICFP'2000 programming contest , to write a ray-tracer program.
      - An Objective Caml program ranks first at the ICFP'1999 programming contest .

   3. ### Where can I find support on mldonkey ?

      The first place is the MLdonkey Project Site where you will find:
      - The mldonkey-users@mail.freesoftware.fsf.org Mailing-list, where you can either contact the developpers or ask other users for advises.
      - The Bug Report system to report bugs appearing when running mldonkey.
      - The Support system where you can ask for support in running mldonkey.

      You can also try to read/post in the MLDonkey Forums or on the IRC Channel #mldonkey on irc.freenode.net .

   4. ### Where can I download mldonkey ?

      The latest stable binaries can be downloaded from the Project Download page . If you want a more recent version of mldonkey, you need to check out the sources from the CVS, and compile it yourself. See Building Mldonkey for help.

   5. ### Where can I find mldonkey for Windows ?

      MLdonkey does not run very well under Cygwin on Windows. Moreover, there is no native port of MLdonkey to Windows, so you will not be able to run it on these systems.

      If you have some knowledge of MinGW, you might try to compile Objective-Caml and mldonkey. It would probably run better than under Cygwin. Note that mldonkey does not use threads, and the select call is only used to descriminate between sockets (read/write/connect/accept).

   6. ### What's new with MLdonkey 2.00 ?

      If you were using MLdonkey 1.16, you might be interested in knowing what is new with MLdonkey 2.00. Here are the main improvements:
      - Overnet support.
      - Completely New GUI: upload panel, icons, configuration of many options.
      - Post-filtering of results (see Overnet or LimeWire plugins).
      - Multi-networks support (sources and CVS only).
      - Many bug fixes: memory leak, "too many open file descrs", sharing, upload/download rates, ...

2. ## Running mldonkey

   1. ### How should I start mldonkey ?

      mldonkey will install its configuration files in the directory where you start it. So, first, choose the right directory, where you want it to run. Then, copy the "servers.ini" file that is in the distribution in this directory. I suppose here that mldonkey is started in its directory. Start mldonkey with:

          ./mldonkey

      It should display some debug info. DON'T CLOSE THE TERMINAL WHERE IT WAS STARTED, otherwise it might get blocked on terminal output. Once you are sure it works correctly, you can dump the debug info in a file (but it can become very big) or better in /dev/null, the next time you start it:

          ./mldonkey &> /dev/null

   2. ### How can I control mldonkey ?

      You have three different ways to control the mldonkey daemon (note that, by default, mldonkey is configured to accept only control connections from the host running mldonkey ( more info )):
      - The telnet interface: the telnet interface allows you to control mldonkey locally or remotely from a terminal with simple commands:

            telnet localhost 4000

        where `localhost` is the host running mldonkey and 4000 is the default port for the telnet interface.

        There are many commands available. Use the `help` command to display all of them.

      - The WEB interface: the WEB interface allows you to control mldonkey through your favorite navigator. The default url is:

            http://localhost:4080/

        where `localhost` is the host running mldonkey and 4080 is the default port for the WEB interface.
      - The GTK GUI: you can use a powerful GTK interface to control mldonkey. It is called `mldonkey_gui` . Use the File::Setting menu to configure how to connect to your mldonkey daemon.

   3. ### Where/what are mldonkey configuration files ?

      MLdonkey creates its configuration files in the directory where it is started. All of them terminate with a .ini extension. You should not modify them while mldonkey is running since it periodically overwrites them. Instead you should either stop it, or modify the options using one of the interfaces.
      - `downloads.ini` : the basic options (and historically, the edonkey plugin options)
      - `files.ini` : the list of files being currently downloaded, and informations needed to recover the download after a stop.
      - `servers.ini` : the list of all known servers for all networks.
      - `friends.ini` : the list of your friends (peers you like to browse files) on all networks.
      - Other configuration files are used by mldonkey plugins, normally one per network.
      - `~/.mldonkey_gui.ini` : the GUI configuration file is the only one which is not stored in the mldonkey directory.

   4. ### How can I control the bandwidth used by mldonkey ?

      There are two options in the downloads.ini file: max_hard_upload_rate and max_hard_download_rate. Setting these options to 0 means that there are no limits. They are expressed in kilobytes/second (not kilobits/second !). The upload limit both applies to the files which are downloaded from you, and for the messages you send to ask for files: be careful not to limit your upload too much !

      | Low Bandwidth Usage | High Bandwidth Usage
      Your Connection Type | max_hard_upload_rate | max_hard_download_rate | max_hard_upload_rate | max_hard_download_rate
      If you have troubles with these values, find the best one corresponding to your link and send us the information to fix this table !
      T1 and more | 50 | 0 | 0 | 0 | Cable/ADSL 512/128 kbs | 2 | 6 | 6 | 12

   5. ### When I modify an option in the config file, mldonkey overwrites it with its old value ?

      There are two cases:
      - When you edit a config file, mldonkey must not run. Indeed, mldonkey saves its configuration periodically, overwritting any changes made in the files.
      - Be careful with the syntax. If mldonkey can't parse the config file, it will generate a new file with the old values for all options that couldn't be read correctly. You must remember that you must put filenames and directory names between "" (they are not always required if there are no special characters inside the name (such as spaces, slashes, etc...), so mldonkey can remove them in some cases).

   6. ### Where are the files I have downloaded with mldonkey ?

      Files being currently downloaded are temporarily stored in the `temp/` directory at the level of mldonkey config files. Files in this directory are identified by their MD4 (for edonkey files) or by a random identifier.

      When the download of a file is finished, the file is added to a list of files that have to be "committed". These files are not renamed, so they are still kept in the temp directory.

      To move finished downloads into the `incoming/` directory with their final name, you need to use the command `commit` in the telnet, or the "Save" buttons in the GUI.

   7. ### Why does MLdonkey automatically pause some of my downloads ?

      When mldonkey receives data for a file from the network, it tries to write this data in the file in the temp/ directory. If, for some reason, it cannot write the data, it immediatly pauses the file.

      This can happen for different reasons:

      - You have no space left on the disk. You can verify it with the "df" command, and free some space for the downloads to continue.
      - The user running mldonkey has not write permissions to write in your temp/ directory, or on the file temporary file.

   8. ### How can I reach mldonkey WEB interface if my firewall only allows port 80 ?

      If you want to access the WEB interface (port 4080) through a firewall, and the firewall only allows port 80, and you don't want to run mldonkey as root, you can set up the apache WEB server to redirect requests to mldonkey:
      - Edit your "httpd.conf" : Insert the following lines somewhere in the "Section 2: main server configuration":

            RewriteEngine       on
            ProxyRequests        on
            RewriteRule /mldonkey http://localhost:4080/$1 [P,L]
            RewriteRule /(submit.*) http://localhost:4080/$1 [P,L]
            RewriteRule /(files.*) http://localhost:4080/$1 [P,L]
            ProxyPassReverse /(.*)  http://localhost:4080/$1

        where, of course, `localhost` is your mldonkey host, and `4080` is the `http_port` of mldonkey.
      - With these rules, `http://aaa.bbb.ccc.ddd/mldonkey` , where `aaa.bbb.ccc.ddd` is the IP address of the host running the apache server, should connect to your mldonkey.

3. ## Running the GTK GUI

   1. ### When I start the GUI, I get a lot of error messages, and the GUI terminates with a "Segmentation Fault" ?

      You probably use the "static" binary of mldonkey GUI. Download the "shared" binaries from this site, and use that GUI. This bug is caused by an incompatibility between the statically linked GTK library and the themes installed on your distribution.

   2. ### I can't connect to mldonkey from a remote host, neither by telnet, WWW or the GUI ?

      You need to modify the "allowed_ips" option in the downloads.ini file to define which hosts are allowed to control your mldonkey core. You can either stop mldonkey, and edit the downloads.ini file:

          allowed_ips = ["127.0.0.1"; "192.168.255.255"; "65.64.43.63"]

      for example allows your localhost (127.0.0.1) to control mldonkey, all the hosts from the network 192.168.*.*, and the host 65.64.43.63. If you don't want to stop mldonkey, just connect locally with the telnet, and type:

          set allowed_ips "127.0.0.1 192.168.255.255 65.64.43.63"

   3. ### The GUI is immediatly disconnected from the core, or keeps connecting and disconnecting very fast ?

      There are two cases to consider:
      - You have set a password in the core to access it through the GUI: you must enter the password in the GUI too (use the `Files :: Settings` menu for that.
      - You have two GUIs connected to the same core: the core (1.99 and later) only allows one GUI to be connected simultaneously. When you connect, it immediatly disconnects the previous GUI. This can only work if the previous GUI does not try to reconnect automatically: `mldonkey_gui` will not reconnect, but maybe you are using another contributed GUI, which tries to automatically reconnect, and make the core disconnect your GUI ? Then, tell its author to remove this feature or to put an option to disable it.

4. ## Building mldonkey

   1. ### How can I download the latest sources of mldonkey ?

      Checkout the sources of mldonkey from the CVS repository . Here is the standard procedure:

          cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/mldonkey login
          (password: just hit enter)
          cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/mldonkey co mldonkey

   2. ### What do I need to compile mldonkey on my system ?

      You need ocaml-3.06 ( Ocaml site ) installed for the code and lablgtk compiled in native code with ocaml 3.06 for the GTK gui. The easiest way is to download binaries for your system. Otherwise, use the following lines to install them:
      - Installing Objective-Caml 3.06 in `/usr/local/bin`

                ~/tmp> tar zxf ocaml-3.06.tar.gz
                ~/tmp> cd ocaml-3.06
                ~/tmp/ocaml-3.06> ./configure
                ~/tmp/ocaml-3.06> make world opt opt.opt
                ~/tmp/ocaml-3.06> make install

      - LablGTK 1.2.3 for example

                ~/tmp> tar zxf lablgtk-1.2.3.tar.gz
                ~/tmp> cd lablgtk-1.2.3
                ~/tmp/lablgtk-1.2.3> make configure
                ~/tmp/lablgtk-1.2.3> make
                ~/tmp/lablgtk-1.2.3> make opt
                ~/tmp/lablgtk-1.2.3> make install

        Do not forget the "make opt" which is required to get a native-code version of the libraries.

   3. ### How do I compile mldonkey on my system ?

      To compile the core, you just need to use the following commands:

                 cd mldonkey
                 ./configure [...options...]
                 make depend
                 make

      You should now have a "mldonkey" executable ... No "make install" is provided.

      If you get strange errors from make, you probably need to use "gmake" on your system.

      You can use the following options for the configure:

      - --enable-batch : install Objective-Caml and Lablgtk locally just to be able to compile mldonkey.
      - --disable-multinet: allows you to only compile support for edonkey
      - --disable-audiogalaxy: allows you to remove support for Audio Galaxy
      - --disable-opennap: allows you to remove support for Open Napster
      - --disable-limewire: allows you to remove support for LimeWire
      - --disable-directconnect: allows you to remove support for Direct Connect
      - --disable-soulseek: allows you to remove support for SoulSeek
      - --disable-openft: allows you to remove support for OpenFT
      - --disable-donkey: allows you to remove support for eDonkey

   4. ### I just updated from CVS, and I get an error while compiling ?

      After an update from the CVS, you MUST restart the configure script, and rebuild the dependencies:

                 cd mldonkey
                 cvs login
                 cvs -z3 up -d
                 ./configure [...options...]
                 make depend
                 make

      If the error messages are related to camlzip, a workaround is to edit manually the file `config/Makefile.config` , and to change the line `ZLIB=no` and `SOULSEEK=no` (only soulseek requires camlzip).

5. ## The eDonkey plugin

   1. ### What is the eDonkey network ?

      The eDonkey network is a network specialized in sharing really big files (between 0 to 1.4 GB).

      This network offers a set of characteristics that cannot be found on other networks:

      - Files can be downloaded from different sources at the same time.
      - Files are identified by uniq identifiers (MD4) that can be used to find new sources for a file.
      - Files are checked using checksums, and chunks (9MB) that are corrupted are downloaded again.
      - Files chunks can be downloaded in any order.
      - Files are shared as soon as a checked chunk has been downloaded, to speed up the spreading of files.

   2. ### Why can't mldonkey connect to any server ?

      - First, check that you have some servers known by mldonkey: connect to mldonkey by telnet (telnet localhost 4000) and use the "vma" command to display all known servers.
      - If you have no servers known, you need to add a list of servers for mldonkey to connect to them: you can either:
        - Manually add them in the telnet :)
        - Import a Windows server.met file (downloaded on the WEB): use the "servers" command in the telnet, for example:

              servers "/mnt/windows/bureau/edonkey server list/server.met"

        - You can restart mldonkey after copying the "servers.ini" file that was in the distribution.
      - If you already have a list of known servers, maybe the list is not up-to-date, and maybe the servers are full. Try to add some new servers like above.

   3. ### How can I import my old edonkey files under mldonkey ?

      - Use the `import` command with the donkey directory containing your old config as parameter. If your old edonkey was running on `/home/bidule/edonkey` (mldonkey should find a "pref.met" file in this directory), you can send the following command on mldonkey console:

            import "/home/bidule/edonkey"

      - This might not work for a Windows configuration, since the absolute path under windows is not the same as under linux (different mount points). In this case, retry this command, but before, make sure that:
        - The files you want to import are in a "temp" directory, inside the directory you give to the "import" command.
        - Remove the "pref.met" file, so that mldonkey does not try to use the temp directory specified in this file.

   4. ### Where can I find files on eDonkey without searching on servers ?

      There are two kinds of WEB sites where you can find ed2k:// links for files on eDonkey:
      - Recommandation Engines: on these Web sites, you will find commented files, that you are sure to find complete on the eDonkey network.
        - The most famous is Share Reactor
      - Search Engines: these Web sites allow you to search for files that are currently available on some servers. However, you have no guaranty they are complete:
        - File Donkey
        - Jigle

   5. ### Why does mldonkey only connect 5 servers, whereas `max_connected_servers` is greater ?

      Being connected to several servers can be useful to spread the files you are uploading, and to initially find more sources to begin a download.

      However, each server on which you are connected is not available for another user. For this reason, you should not stay connected to too many servers. mldonkey enforces this policy by limiting to 5 the number of servers on which you remain connected for a long time, whatever the value of `max_connected_servers` is.

      Thus, you should simply see `max_connected_servers` as the number of servers mldonkey tries to connect concurrently to at the startup, not as the number of servers he will remain connected to.

   6. ### What's about Overnet ?

      Overnet is a network using the same download protocol as edonkey, but a different search/localisation protocol , that doesn't need servers.

      MLdonkey 2.00 is able to search for files and sources on Overnet. For that, you must make sure that:

      1. The "overnet_search_sources" and "overnet_search_keywords" options are set to true.
      2. You have a (recent) list of Overnet peers that you can connect to. For that, you can:
         - Use the "servers.ini" file from the most recent distribution of mldonkey. It contains a long list of Overnet peers.
         - Use the "boot IP PORT" command, to add a new peer.
         - Use the "ovweb URL" command, to download a .ocl file from url URL containing a list of recent peers.
         You can use the "ovstats" command, to display how many peers you have been able to connect to (well, they have replied to a connect UDP packet).
      3. If you have enabled "overnet_search_keywords", replies to search can arrive from Overnet peers. These results are not very accurate (they only need to match only one of the keywords, instead of all for example).

         As for all networks, you can activate post-filtering of results (very useful on Gnutella too): set the "filter_search" option to true, and maybe the "filter_search_delay" option (period between results updates in seconds). Then, only results matching exactly your query will be displayed.

   7. ### I'm behind a firewall, what should I do ?

      MLdonkey uses two ports for incoming connections, one on TCP (default is 4662) and the other one for UDP (4666). Thus, you should open these ports in your firewall, and forward them to the computer running mldonkey. More generally, you can do that for all ports between 4660 and 4670.

      Allowing incoming connections is important as it is the only way for you to connect other sources which are behind a firewall.

      If you have no control on the firewall, and your administrator blocks port 4660 to 4670, you should change the port used by mldonkey in the configuration file `downloads.ini` : `port` is the TCP port, while the UDP port is always computed as `port + 4` .

   8. ### How can I share multiple directories ?

      Just edit the `shared_directories` option in `downloads.ini` :

          shared_directories = [ "/usr/share/documents"; "/usr/share/videos"]

6. ## The Soulseek plugin

   1. ### What is the Soulseek network ?

      The Soulseek Network is a network similar to Napster.

      You connect on a single server, and there, you can search for (mainly audio) files, you can join rooms to chat with other users, and you can browse other users files.

   2. ### Why can't mldonkey connect to any server ?

      There is only one server on Soulseek, and the one you have in soulseek.ini is probably not up-to-date. Normally, mldonkey will download another one, so that you will have to servers in your list of servers.

      By default, mldonkey_gui does not display the servers you are not connected to. So you have to use the "Display All Servers" button, and ask mldonkey to try to connect to the second soulseek server.

      Currently, the server is `mail.slsk.org` , port 2242.

      Mldonkey behavior will be improved to automatically connect to the current server from the soulseek site Web page.

7. ## The LimeWire plugin

   1. ### What is the LimeWire network ?

      The LimeWire network is a network built upon the Gnutella network .

      The main difference is that all nodes in this network do not broadcast each received message to its neighbours. Instead, special nodes, called ultra-peers, with higher connectivity are dedicated for this task, whereas other smaller nodes (such as mldonkey) only connect and ask ultra-peers.

      Currently, the LimeWire support in MLdonkey also allows mldonkey client to use Gnucleus , Morpheus , and MyNapster ultra-peers as servers.

      On this network, you can mainly search for small files, you have no way to chat nor browse other peers.

   2. ### When I search for files, I receive unrelated results ?

      On Gnutella, there is no specified protocol for asking complex queries to other peers. Instead, each peer is free to interpret your query as it wants and reply what it wants.

      In particular, multiple-words queries are often understood as logical-or queries between words, ie each document that contains at least one word is returned.

      As for Overnet, you can activate post-filtering of sources. Then, results which are received are checked by mldonkey against the query and only displayed if they are accurate. Post-Filtering is activated by setting the "filter_search" option to true, and modifying the "filter_search_delay" depending on the period you want between updates (for example, 30 means that results will be added only every 30 seconds).

8. ## The other plugins

   1. ### What is the current Development Status of mldonkey plugins ?

      The current Development Status of mldonkey (in the CVS) at 2002/09/09 is shown on the following table (also have a look at the ChangeLog )

      Features | eDonkey | Direct Connect | Open Napster | Gnutella LimeWire | Soulseek | Audio Galaxy | OpenFT
      Download Server List | 1.16 | CVS | CVS | CVS | CVS | CVS |
      Server Connect | 1.16 | CVS | CVS | CVS | CVS | CVS | CVS
      View Server Users | 1.16 | CVS |  |  |  |  |
      Search Files | 1.16 | CVS | CVS | CVS | CVS | (web) | CVS
      Browse Peer | 1.16 | CVS |  |  | CVS |  |
      Download Files | 1.16 | CVS | CVS | CVS | CVS | CVS | CVS
      Recover Files | 1.16 | CVS | CVS | CVS |  | CVS |
      Recover Sources | 1.16 | CVS |  |  |  | CVS | CVS
      Pause Downloads | 1.16 |  |  |  |  | CVS |
      Cancel Downloads | 1.16 (not CVS) |  |  |  |  | CVS |
      Upload Files | 1.16 |  |  |  |  |  |
      Upload File List | 1.16 | CVS |  |  |  |  |
      Friends | 1.16 |  |  |  |  |  |
      Public Messages |  | CVS |  |  | CVS |  |
      Private Messages | 1.16 |  |  |  |  |  |
      Import Windows Config | 1.16 |  |  |  |  |  |
      Config File | downloads.ini | directconnect.ini | opennap.ini | limewire.ini | soulseek.ini | audiogalaxy.ini | openft.ini
      Disable Network | CVS | CVS | CVS | CVS | CVS | CVS | CVS

If you have any comments, if you want to add some questions, or improve this FAQ, send a mail to mldonkey@mldonkey.net