它来自这个答案:
https://stackoverflow.com/questions/2482411/is-this-pdo-bug-fixed-now/2482424#2482424
当主机是“localhost”时,MySQL Unix 客户端使用 Unix 套接字,AKA Unix 域套接字,而不是 TCP/IP 套接字进行连接,因此 TCP 端口无关紧要。
它来自这个答案:
https://stackoverflow.com/questions/2482411/is-this-pdo-bug-fixed-now/2482424#2482424
当主机是“localhost”时,MySQL Unix 客户端使用 Unix 套接字,AKA Unix 域套接字,而不是 TCP/IP 套接字进行连接,因此 TCP 端口无关紧要。
UNIX 套接字,又名 Unix 域套接字,是一种进程间通信机制,允许在同一台机器上运行的进程之间进行双向数据交换。
IP 套接字(尤其是 TCP/IP 套接字)是一种允许进程之间通过网络进行通信的机制。在某些情况下,您可以使用 TCP/IP 套接字与运行在同一台计算机上的进程通信(通过使用环回接口)。
UNIX 域套接字知道它们在同一个系统上执行,因此它们可以避免一些检查和操作(如路由);这使得它们比 IP 插座更快更轻。因此,如果您计划与同一主机上的进程进行通信,这是比 IP 套接字更好的选择。
编辑:根据Nils Toedtmann 的评论:UNIX 域套接字受文件系统权限的约束,而 TCP 套接字只能在数据包过滤器级别进行控制。
您可以使用以下命令列出您自己的机器本地 unix 套接字:
Linux:
MacOS:[jbmeerkat 评论]
玩得开心!
TCP/IP 套接字用于跨 TCP/IP 网络的通信。连接的 TCP 套接字由本地 IP、本地端口、远程 IP 和远程端口的组合标识。侦听 TCP 套接字由本地端口和可能的本地 IP 标识。据我了解,至少在 linux TCP/IP 套接字上总是会导致 TCP/IP 数据包的生成和解码,即使客户端和服务器在同一台机器上也是如此。
另一方面,unix 域套接字(有时简称为 unix 套接字)在单台机器上运行。监听套接字位于文件系统层次结构中,对它们的访问可以由文件系统权限控制。
此外,接受 Unix 套接字上的连接的进程可以确定连接的进程的用户 ID。这可以避免对身份验证步骤的需要。无需为您的数据库服务器生成密码并将其副本包含在您的 webapp 代码中,您只需告诉数据库服务器运行 webapp 的用户可以访问数据库中的相应用户帐户。
当然
Internet 协议规范仅倾向于关注在线上发生的情况,TCP 规范包含对 Socket 的定义,但该定义与“套接字 API”如何使用该术语不同。
我们所知道的“套接字 API”是由 BSD 引入的,但后来被复制到各处,并作为 posix 标准的一部分包含在内。TCP 和 UDP 套接字的基本内容在不同平台上往往相同,但更高级的内容和与操作系统其他部分交互的内容各不相同,例如在类 unix 系统上,套接字由文件句柄标识,并且可以由文件 API 读取/写入,Windows 上不是这种情况。
对套接字 API 的一些扩展已记录在 rfcs 中,但这些 RFC 只是“信息性的”。
当应用程序使用“socket”函数显式创建套接字时(套接字也由accept 函数创建),它传递三个参数,“域”、“类型”和“协议”。在它们之间,这三个参数可以用来选择许多不同类型的套接字。