     return @_serverChain
 
 
+  # get the actual server client chain, build it when it doesn't exist
   getServerClientChain: () ->
 
     unless @_serverClientChain?

      if fn.error? then return fn
      result = chain.add fn
      if result?.error? then return result

  # load a string via require(), return a function, or return an error otherwise
  _load: (arg) ->

    return @_serverClientChain


  # build a new client socket, return the socket or the build chain failure
  client: (options) ->
    result = @_run @getClientChain(), options
    if result.failed? then result
    else result.context.client


  # build a new server socket, return the socket or the build chain failure
  server: (options) ->
    result = @_run @getServerChain(), options
    if result.failed? then result
    else result.context.server


  # client() and server() use this to run their build chains
  _run: (chain, options) ->
    # # build options for chain.run(), choose the options which exists
    # if they specified options specific to the chain, pull them out
