This is an old revision of the document!

PHP RFC: Implement socket_getaddrinfo()


This RFC targets a reported feature request in #72733. The request is that PHP expose the C level function getaddrinfo(). This is a missing nice piece to the current socket library. When dealing with IP variable networks it would be beneficial to allow libc to tell us what methods of connecting/listening would be most appropriate given a set of hints.


The implementation[1] I'm proposing implements 4 new socket_* functions. socket_getaddrinfo() will return an array of resources, with each resource corresponding to each returned addrinfo sockaddr. The next two implemented methods socket_addrinfo_bind(), and socket_addrinfo_connect(), would be used to bind, or connect, to a given resource rather than make the user go through the process of creating the socket and connect/binding themselves. The fourth function is a free'r if you'd want to free the resources before end of script.

array    socket_getaddrinfo(string node[, mixed service, array hints])
resource socket_addrinfo_connect(sockaddrresource sockaddr)
resource socket_addrinfo_bind(sockaddrresource sockaddr)
null     socket_addrinfo_close(sockaddrresource sockaddr)
$addrinfo = socket_getaddrinfo('', 2000, array('ai_family' => AI_INET, 'ai_socktype' => SOCK_STREAM));
$sockaddr = reset($addrinfo);
if (!$sockaddr) die ("No Valid Socket Types");
$sock = socket_addrinfo_bind($sockaddr);
// ^^ $sock is a socket resource that is bound to using TCP/IP ready for reading
foreach ($addrinfo as $sockaddr) {

Backward Incompatible Changes

New functionality; no BC problems here.

Proposed PHP Version(s)

Next PHP 7.x (currently 7.2)

RFC Impact



To Existing Extensions

Socket acquired new functionality

To Opcache


New Constants

Exposing the AI_* family of constants.

Proposed Voting Choices

Vote to implement the new functions, would require a 2/3 majority.



rfc/socket_getaddrinfo.1470669623.txt.gz · Last modified: 2017/09/22 13:28 (external edit)