)]}'
{
  "commit": "f354424fe65f4974f640a4ee629dabea821b41be",
  "tree": "a1d6653b9c9cda40c4a89461745177de7ba5194a",
  "parents": [
    "d9b8448e5351433ab9cd5bb874fc013887bc0e0b"
  ],
  "author": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Wed Dec 20 13:20:10 2017 -0500"
  },
  "committer": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Wed Dec 20 13:37:08 2017 -0500"
  },
  "message": "net: Support non-blocking connect() calls\n\nDropbear\u0027s port forwarding requires support for non-blocking connect().\nSpecifically, they will attempt a connection, then go back to their service\nloop.  Once select() returns for that FD (which is a Qdata FD), it\u0027ll check\nthe socket options - a spurious select() will break it.\n\nWithout non-blocking connect(), the entire DB connection would lock up.\nFor instance, if you port-forward to a host on the other side of a firewall\nthat doesn\u0027t send resets, your connection will hang in SYN_SENT until TCP\ntimes out.  Your DB connection (e.g. the shell associated with the port\nforward) will hang.\n\nAs far as tapping and polling for the connection being up, we can use the\nQdata FD.  It will become writable when we know one way or the other about\nthe connection: e.g. either established or reset.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "459706737dfac5f805aa19130a3bbd219347d1dc",
      "old_mode": 33188,
      "old_path": "kern/src/net/devip.c",
      "new_id": "d8c1e81edd93a211c298d467e6c9b4f06b96fa9c",
      "new_mode": 33188,
      "new_path": "kern/src/net/devip.c"
    }
  ]
}
