Use ToSocketAddr to allow the string form of a network address

Using the `ToSocketAddr` trait, we can eliminate the need to import `Ipv4Addr` every time.
You should create a new `InvalidAddressError` and use that instead.