ソケットとは
ソケットは、アプリケーションがOSの通信機能を利用するために作る、通信端点を表す操作用の仕組みです。英語ではsocket(ソケット)と呼び、ネットワーク通信を扱うものはnetwork socket(ネットワーク・ソケット)とも呼ばれます。
ソケットは、アプリケーションがOSの通信機能を利用するために作る、通信端点を表す操作用の仕組みです。
アプリは、ネットワーク機器を直接操作してパケットを一つずつ組み立てる代わりに、ソケットを作り、接続、送信、受信、終了といった操作をOSへ依頼します。ソケットは通信の「相手側の機械」ではなく、自分のアプリがOS内で扱う通信の入口です。

作った直後のソケットには、まだ相手がいない
socket()のようなAPIで作成した直後は、通信規則や方式は選ばれていますが、通常はローカルのIPアドレスとポート番号へまだ結び付けられていません。アプリの操作やOSの自動選択によって端点情報が決まります。
クライアントは接続先を指定してconnect()を行うと、OSが利用する送信元アドレスと一時ポートを選べます。サーバーは、受け付けたいローカルアドレスとポートへbind()して待ち受けます。
TCPサーバーでは、待受用と会話用を分ける
サーバー
socket端点を作るbindアドレスとポートへ結ぶlisten接続要求を待つaccept会話用ソケットを作る
クライアント
socket端点を作るconnectサーバーへ接続するsend / receiveデータを交換するclose利用を終える
accept()が返すのは、特定のクライアントと通信する新しいソケットです。元の待受ソケットを残すことで、サーバーは別のクライアントからの接続要求も受け付けられます。一つのTCP接続は、両端の組で見分ける
TCP接続は、送信元IPアドレス、送信元ポート、宛先IPアドレス、宛先ポートの四つの値に通信規則を加えて識別されます。そのため、一つのサーバーポートへ多数のクライアントが同時接続しても、クライアント側のアドレスやポートが異なれば別の接続です。
待受ソケットは「このローカルポートへの新しい接続」を受け付けますが、接続済みソケットは「この相手との一つの会話」を表します。同じソケットという名前でも状態と用途が異なります。
UDPソケットは、接続の意味がTCPと異なる
UDPは、TCPのような接続確立や信頼性のあるバイト列を提供しません。UDPソケットは一通ごとに宛先を指定して送受信できます。UDPでconnect()を使う実装もありますが、既定の相手をOSへ登録して送受信を簡単にする意味が中心で、TCPの接続確立と同じ動作ではありません。
ソケットにはネットワーク用以外に、同じ端末内のプロセス間通信に使う種類もあります。「ソケット=IPアドレスとポートの組」だけではなく、それらを扱うOSの通信端点と操作手段として捉えます。
仕様の確認資料:The Open Group「socket — create an endpoint for communication」、RFC 9293「Transmission Control Protocol」