How can I control the sharpness of corners using Subsurf?
You can crease edges with Shift+e as well as inputing the Crease value in the n panel:





It is also possible to model the edge loops in such a way so they get narrower where you need sharper corners or edges. 

Using Subsurf is also not the only way to model things. It adds a lot of unnecessary geometry and it is always worth to consider if you could achieve similar forms with other modelling tools, for example, using bevels.