奇怪的是,如果在使用 `socket_create()` 和 `socket_create_pair()` 建立 Unix-domain (AF_UNIX) 通訊端後呼叫 `socket_bind()` 來命名原本匿名的通訊端,那麼 `getsockname()` 就能夠正常運作。
呼叫 `socket_bind()` 也會在檔案系統中建立一個「檔案」(通訊端,在 "ls -l" 列表中以 's' 開頭),並使用指定的檔案名稱。這樣的「檔案」需要明確地移除,因為關閉通訊端並不會將其移除。
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_getsockname — 查詢給定 socket 的本地端,可能會返回主機/埠或 Unix 檔案系統路徑,取決於其類型
注意事項:對於使用 socket_connect() 建立的
AF_UNIX
類型套接字,不應使用 socket_getsockname()。只有使用 socket_accept() 建立的套接字,或是呼叫 socket_bind() 後的主伺服器套接字,才會返回有意義的值。
socket
使用 socket_create() 或 socket_accept() 建立的 Socket 實例。
address
如果指定的套接字類型為 AF_INET
或 AF_INET6
,socket_getsockname() 會以適當的表示法(例如 127.0.0.1
或 fe80::1
)將本地 *IP 地址* 返回到 address
參數中,並且如果存在可選的 port
參數,則還會返回關聯的埠號。
如果指定的套接字類型為 AF_UNIX
,socket_getsockname() 會將 Unix 檔案系統路徑(例如 /var/run/daemon.sock
)返回到 address
參數中。
port
如果提供此參數,它將保存關聯的埠號。
成功時返回 true
,失敗時返回 false
。socket_getsockname() 也可能在套接字類型不是 AF_INET
、AF_INET6
或 AF_UNIX
時返回 false
,在這種情況下,*不會*更新最後一個套接字錯誤代碼。