PHP Conference Japan 2024

socket_getsockname

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_getsockname查詢給定 socket 的本地端,可能會返回主機/埠或 Unix 檔案系統路徑,取決於其類型

說明

socket_getsockname(Socket $socket, 字串 &$address, 整數 &$port = null): 布林值

注意事項:對於使用 socket_connect() 建立的 AF_UNIX 類型套接字,不應使用 socket_getsockname()。只有使用 socket_accept() 建立的套接字,或是呼叫 socket_bind() 後的主伺服器套接字,才會返回有意義的值。

參數

socket

使用 socket_create()socket_accept() 建立的 Socket 實例。

address

如果指定的套接字類型為 AF_INETAF_INET6socket_getsockname() 會以適當的表示法(例如 127.0.0.1fe80::1)將本地 *IP 地址* 返回到 address 參數中,並且如果存在可選的 port 參數,則還會返回關聯的埠號。

如果指定的套接字類型為 AF_UNIXsocket_getsockname() 會將 Unix 檔案系統路徑(例如 /var/run/daemon.sock)返回到 address 參數中。

port

如果提供此參數,它將保存關聯的埠號。

返回值

成功時返回 true,失敗時返回 falsesocket_getsockname() 也可能在套接字類型不是 AF_INETAF_INET6AF_UNIX 時返回 false,在這種情況下,*不會*更新最後一個套接字錯誤代碼。

更新日誌

版本 說明
8.0.0 socket 現在是 Socket 實例;以前,它是 資源

參見

新增筆記

使用者貢獻的筆記 1 則筆記

CXJ
10 年前
奇怪的是,如果在使用 `socket_create()` 和 `socket_create_pair()` 建立 Unix-domain (AF_UNIX) 通訊端後呼叫 `socket_bind()` 來命名原本匿名的通訊端,那麼 `getsockname()` 就能夠正常運作。

呼叫 `socket_bind()` 也會在檔案系統中建立一個「檔案」(通訊端,在 "ls -l" 列表中以 's' 開頭),並使用指定的檔案名稱。這樣的「檔案」需要明確地移除,因為關閉通訊端並不會將其移除。
To Top