anchor.diff:  %% Each time a client intends to read/write to a file it notifies the
   %% directory server. If the file is not a member of the set of open files
   %% the server the file server to open a file handle to the file.
  -%% 
  +%%
   %% When the limit on file servers keeping open file handles has been reached
   %% the file server will notify the least recently used file server to close
   %% its file handle for each notification for a file that is not in the set
   %% of open files.
   %%
  -%% ## Guarantees
  +%% == Guarantees ==
   %% The protocol between the directory server and the file servers is
   %% asynchronous, there is no guarantee that the number of open file handles
   %% will never be larger than the specified number.
   %%
  -%% ## Synchronization
  +%% == Synchronization ==
   %% The gproc application is used to keep a registry of the process ids of
   %% directory servers and file servers. A file server registers under a second
   %% name when it has an open file handle. The support in gproc for waiting until a
   %% name is registered is used to notify clients when the file server has an
   %% open file handle.
   %%
  +%% @end
  +-module(etorrent_io).
  +-behaviour(gen_server).
  +-include("types.hrl").
  +
  +-ifdef(TEST).
  +-include_lib("eunit/include/eunit.hrl").
  +-endif.
  +
  +-define(AWAIT_TIMEOUT, 10*1000).
  +
   -export([start_link/2,
            read_piece/2,
            read_chunk/4,
  
positive.code: %% for a file server to enter the open state when the file server
  %% crashed before it could enter the open state.
  %%
  handle_call({read, _, _}, _, State) ->
      {reply, {error, eagain}, State};
  handle_call({write, _, _}, _, State) ->
  
negative.code:     NewState = State#state{files_open=WithNewFile},
      {noreply, NewState}.
  
  %% @private
  handle_info({'DOWN', FileMon, _, _, _}, State) ->
      #state{
          torrent=TorrentID,
  