©
本文檔使用 php中文網手册 發布
(PHP 4 >= 4.1.0, PHP 5)
socket_getsockname — Queries the local side of the given socket which may either result in host/port or in a Unix filesystem path, dependent on its type
$socket
, string &$addr
[, int &$port
] )Note: socket_getsockname() should not be used with
AF_UNIX
sockets created with socket_connect() . Only sockets created with socket_accept() or a primary server socket following a call to socket_bind() will return meaningful values.
socket
A valid socket resource created with socket_create() or socket_accept() .
addr
If the given socket is of type AF_INET
or AF_INET6
, socket_getsockname()
will return the local IP address in appropriate notation (e.g.
127.0.0.1 or fe80::1) in the
address
parameter and, if the optional
port
parameter is present, also the associated port.
If the given socket is of type AF_UNIX
,
socket_getsockname() will return the Unix filesystem
path (e.g. /var/run/daemon.sock) in the
address
parameter.
port
If provided, this will hold the associated port.
成功时返回 TRUE
, 或者在失败时返回 FALSE
。 socket_getsockname() may also return
FALSE
if the socket type is not any of AF_INET
,
AF_INET6
, or AF_UNIX
, in which
case the last socket error code is not updated.
[#1] CXJ [2014-09-17 19:28:58]
Curiously, getsockname() works for socket_create() and socket_create_pair() Unix-domain (AF_UNIX) sockets if one calls socket_bind() after creation to name the formerly anonymous socket(s).
Using a socket_bind() call also results in a file system "file" (socket, first character 's' in an "ls -l" listing) being created with the given name. Such a "file" will need to be removed explicitly, as closing the socket will not remove it.
[#2] not at valid dot com [2007-10-13 12:35:30]
Just a quick note:
I found socket_getsockname() is not IPv6 compatible or may just return some unexpected results?
<?php
Simple Code Example:
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,'0.0.0.0',150);
socket_getsockname($socket, $IP, $PORT);
print $IP.":".$PORT."\n";
?>
This does not print $IP 127.0.0.1 or 192.168.1.1 or even 0.0.0.0 ... etc ... like you would expect ... in my case I receive 10.0.0.0 witch is not a valid port on my system using IPv5 and IPv6! Thus you should rely on using the initial values of socket_bind() to get the local address.
Hope this helps...