rfc:socket_getaddrinfo

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
rfc:socket_getaddrinfo [2016/08/24 15:20] bp1222rfc:socket_getaddrinfo [2016/09/05 17:28] bp1222
Line 3: Line 3:
   * Date: 2016-08-08   * Date: 2016-08-08
   * Author: David Walker (dave@mudsite.com)   * Author: David Walker (dave@mudsite.com)
-  * Status: Under Discussion+  * Status: Implemented (PHP 7.2)
   * First Published at: http://wiki.php.net/rfc/socket_getaddrinfo   * First Published at: http://wiki.php.net/rfc/socket_getaddrinfo
  
Line 10: Line 10:
  
 ===== Proposal ===== ===== Proposal =====
-The implementation[[https://wiki.php.net/rfc/socket_getaddrinfo#references|[1]]] I'm proposing implements 4 new functions.  ''socket_addrinfo_lookup()'' will return an array of resources, with each resource corresponding to each returned addrinfo.  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 last is to convert the resource to an array for examination.+The implementation[[https://wiki.php.net/rfc/socket_getaddrinfo#references|[1]]] I'm proposing implements 4 new functions.  ''socket_addrinfo_lookup()'' will return an array of resources, with each resource corresponding to each returned addrinfo.  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 last, ``socket_addrinfo_explain`` is to convert the resource to an array for examination.
 <file php> <file php>
 socket_addrinfo_lookup(string node[, mixed service, array hints]) : array socket_addrinfo_lookup(string node[, mixed service, array hints]) : array
Line 18: Line 18:
 </file> </file>
  
 +IPv4 Example
 <file php> <file php>
 <?php <?php
-$addrinfo = socket_addrinfo_lookup('127.0.0.1', 2000, array('ai_family' => AI_INET, 'ai_socktype' => SOCK_STREAM));+$addrinfo = socket_addrinfo_lookup('localhost', 2000, array('ai_family' => AF_INET, 'ai_socktype' => SOCK_STREAM));
 $sockaddr = reset($addrinfo); $sockaddr = reset($addrinfo);
 if (!$sockaddr) die ("No Valid Socket Types"); if (!$sockaddr) die ("No Valid Socket Types");
 $sock = socket_addrinfo_bind($sockaddr); $sock = socket_addrinfo_bind($sockaddr);
 // ^^ $sock is a socket resource that is bound to 127.0.0.1:2000 using TCP/IP ready for reading // ^^ $sock is a socket resource that is bound to 127.0.0.1:2000 using TCP/IP ready for reading
 +
 +var_dump(socket_addrinfo_explain($sockaddr));
 +/* Outputs:
 +array(5) {
 +  ["ai_flags"]=>
 +  int(0)
 +  ["ai_family"]=>
 +  int(2)
 +  ["ai_socktype"]=>
 +  int(1)
 +  ["ai_protocol"]=>
 +  int(6)
 +  ["ai_addr"]=>
 +  array(2) {
 +    ["sin_port"]=>
 +    int(2000)
 +    ["sin_addr"]=>
 +    string(9) "127.0.0.1"
 +  }
 +}
 +*/
 +</file>
 +
 +IPv6 Example
 +<file php>
 +<?php
 +$addrinfo = socket_addrinfo_lookup('localhost', 2000, array('ai_family' => AF_INET6, '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 [::1]:2000 using TCP/IP ready for reading
 +
 +var_dump(socket_addrinfo_explain($sockaddr));
 +/* Outputs:
 +array(5) {
 +  ["ai_flags"]=>
 +  int(0)
 +  ["ai_family"]=>
 +  int(10)
 +  ["ai_socktype"]=>
 +  int(1)
 +  ["ai_protocol"]=>
 +  int(6)
 +  ["ai_addr"]=>
 +  array(2) {
 +    ["sin6_port"]=>
 +    int(2000)
 +    ["sin6_addr"]=>
 +    string(3) "::1"
 +  }
 +}
 +*/
 </file> </file>
  
Line 45: Line 98:
 ==== New Constants ==== ==== New Constants ====
 Exposing the AI_* family of constants. Exposing the AI_* family of constants.
- 
-===== Open Issues ===== 
  
 ===== Proposed Voting Choices ===== ===== Proposed Voting Choices =====
-Vote to implement the new functions, would require a 2/3 majority.+Vote to implement the new functionality, would require a 2/3 majority. 
 +<doodle title="Implement socket_getaddrinfo family" auth="bp1222" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle> 
 +Vote Start: 2016-08-24 15:23 UTC 
 + 
 +Vote End:   2016-08-31 23:59 UTC
  
 ===== Implementation ===== ===== Implementation =====
 +
 +  - merged into master (i.e. pre 7.2)
 +  - https://github.com/php/php-src/commit/d59af68f
 +  - https://github.com/php/php-src/commit/750f3d3f
 +  - a link to the PHP manual entry for the feature
  
 ===== References ===== ===== References =====
   * [1] - [[https://github.com/php/php-src/pull/2078|Proposed Implementation]]   * [1] - [[https://github.com/php/php-src/pull/2078|Proposed Implementation]]
rfc/socket_getaddrinfo.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1