title: LuaSocket - attempt to call field 'try' (a nil value)
body: <p>Platform: (where Lua and LuaSocket are ported)
  An embedded system using ARM 7 development board running 3rd party RTOS with TCP/IP stack.</p>
  
  <p>What works:</p>
  
  <ul>
  <li>Using Lua standard library such as "io" calls, print, assert, etc </li>
  <li>sending UDP packets by using the udp = assert(socket.udp) method, assert(udp:send(something))</li>
  </ul>
  
  <p>Problem:
  When executing an example smtp lua script:</p>
  
  <pre><code>local smtp = require("socket.smtp")
  from = "myEmail"
  rcpt = {"&lt;someOne's Email&gt;"}
  mesgt = { heasers = {someHeader}, body = "Hello World" } 
  r, e = smtp.send {
      from = from,
      rcpt = rcpt, 
      source = smtp.message(mesgt),
      server = "someServer",
      port = 25,
  }
  
  -- an error returns after execution: 
  -- lua\socket\smtp.lua:115: attempt to call field 'try' (a nil value)
  
  -- Corresponding code in smtp.lua around line 115:
  
  function open(server, port, create)
      local tp = socket.try(tp.connect(server or SERVER, port or PORT,
          TIMEOUT, create))
      local s = base.setmetatable({tp = tp}, metat)
      -- make sure tp is closed if we get an exception
      s.try = socket.newtry(function()
          s:close()
      end)
      return s
  end
  
  // Where try = newtry() in socket.lua and the corresponding C code is the same
  // from the one provided with the library for UNIX:
  static int global_newtry(lua_State *L) {
      lua_settop(L, 1);
      if (lua_isnil(L, 1)) lua_pushcfunction(L, do_nothing);
      lua_pushcclosure(L, finalize, 1);
      return 1;
  }
  </code></pre>