Families and types specify different choices
On Linux and other systems exposing BSD-style interfaces, socket creates an endpoint and returns a file descriptor. Families select IPv4, IPv6 or local communication; types select streams or datagrams, with a protocol choice as appropriate. Creation is not a universal TCP connection call.
The interface can also support local communication without Internet port numbers. A descriptor is a process reference to a kernel object, not the port transmitted in a packet or a globally stable session identifier.
Listening and accepted endpoints are distinct
A server commonly binds locally, listens and uses accept to obtain a new connected socket while the listening endpoint remains available for further connections. A client uses connect to establish or associate a peer, with protocol-dependent meaning.
Binding, connection and data transfer are separate operations with separate failures. A nonblocking connection can initially report progress and require later readiness and error checks. A descriptor or writable event is not proof of completed remote application work.
References: [2]
Streams and datagrams need different framing assumptions
Byte streams do not preserve individual write boundaries: one write can require several reads, or several writes can appear in one read. Applications need length fields, delimiters or other framing rather than counting reads as messages.
Datagrams preserve message boundaries, but basic datagram semantics do not promise reliable ordered delivery. Blocking behavior is a separate dimension: nonblocking operations report inability to progress so the application can wait or retry, not remove latency or supply a reliability protocol.