This behaviour appears to date from the 4.4 BSD import. It has two
problems:
- The update to so_state is racy, and this can cause problems in the socket connection state machine. In particular it means that the check in solisten_proto_check() fails to catch a connecting socket.
- Suppose two threads race to call connect(2) on a socket, and one succeeds while the other fails. Then the failing thread may incorrectly clear SS_ISCONNECTING, confusing the state machine.
Simply remove the update. I don't believe it's necessary: pru_connect
implementations which call soisconnecting() only do so after all failure
modes have been handled. For instance, tcp_connect() and tcp6_connect()
will never return an error after calling soisconnected(). However, we
cannot correctly assert that SS_ISCONNECTED is _not_ set after an error
from soconnect().