In Mac OS X 10.10, `launch_activate_socket` was introduced.
So whenever the port is requested, the `launchd` can launch the program
dynamically. A possible plist may like this:
```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.github.shadowsocks</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/ss-local</string>
<string>-s</string>
<string>server host</string>
<string>-p</string>
<string>server port</string>
<!-- the -l and -b can be ommited, as launchd takes over it -->
<string>-k</string>
<string>password</string>
<string>-m</string>
<string>method</string>
<string>-t</string>
<string>timeout</string>
<string>-A</string>
</array>
<key>Sockets</key>
<dict>
<!-- the name is hard coded in ss-local -->
<key>Listeners</key>
<dict>
<key>SockNodeName</key>
<string>127.0.0.1</string>
<key>SockServiceName</key>
<string>socks</string>
</dict>
</dict>
</dict>
</plist>
```
The magic is `launchd` will listen to the `SockServiceName`, when the port
is requested, the `ss-local` will be launched.
- GNU treats void* as char* when doing pointer arithmetic, so let's make it clear
- Fix memory leak, save copy from malloc() and pass the original pointer to free()
- minor type mismatches
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>