Use a boolean as parameter for setNonBlocking() function.

Use the POSIX method to set or unset non blocking state on Unix-like
systems.
Removing Close() call in destructor.

The issue is that the destructor is called when copying and then
reassigning the object. There is still a valid copy of the object left
in invalid state.

The use of shared_ptr could help to synchronize the state of the object
and the socket contained.