Req #72733 [Fbk->Opn]: It would be nice to have something like getaddrinfo.
| From: | email at davekok dot nl | Date: | Sun, 07 Aug 2016 07:02:31 +0000 |
| Subject: | Req #72733 [Fbk->Opn]: It would be nice to have something like getaddrinfo. | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-203022@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=72733&edit=1
ID: 72733
User updated by: email at davekok dot nl
Reported by: email at davekok dot nl
Summary: It would be nice to have something like getaddrinfo.
-Status: Feedback
+Status: Open
Type: Feature/Change Request
Package: Sockets related
Operating System: Any
PHP Version: 7.0.9
Block user comment: N
Private report: N
New Comment:
That is indeed the point. Mostly I only have a hostname, not an IP address and knowing whether a
hostname supports or requires IPv6 is hard to find out. It requires you to do your own DNS queries.
There is no gethostbyname for IPv6 in PHP.
A simple socket wrapper could look something like this with getaddrinfo.
<?php
class Socket {
private $address;
private $socket;
public function __construct(string $host, string $service) {
$addresses = socket_addrinfo($host, $service, [
"ai_family"=>PF_UNSPEC,
"ai_socktype"=>SOCK_STREAM
]);
if ($addresses === false) throw new Exception("host not found");
$this->address = reset($addresses);
$this->socket = socket_create(
$address["ai_family"],
$address["ai_socktype"],
$address["ai_protocol"]
);
if (!$this->socket) throw new Exception("error creating socket");
}
public function bind() {
socket_bind($this->socket, $this->address["ai_addr"]);
}
public function listen(int $backlog = 0) {
socket_listen($this->socket, $backlog);
}
public function connect() {
socket_connect($this->socket, $this->address["ai_addr"]);
}
// other socket stuff
}
As an additional benefit you don't even need to know the port number you can just use the
service name.
Previous Comments:
------------------------------------------------------------------------
[2016-08-07 04:12:58] kalle@php.net
Could you expand your idea with some code examples of what you do now and how you propose a solution
to visualize this some more?
------------------------------------------------------------------------
[2016-08-03 23:06:35] dave at mudsite dot com
I'm not certain I'm following what is hard about supporting both. socket_create()'s
first argument allows you to choose to have this socket be an AF_INET or AF_INET6. Unless
you're attempting to pull information about a host wherein you can get all addresses about a
host for a specific purpose a-la: http://www.logix.cz/michal/devel/various/getaddrinfo.c.xp
------------------------------------------------------------------------
[2016-08-02 13:28:56] email at davekok dot nl
Description:
------------
Currently it is rather hard to support both IPv4 and IPv6 in PHP when using sockets. It would be
rather nice if getaddrinfo system function would be available to PHP scripts. If have yet to find a
alternative for PHP that works just as clean.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=72733&edit=1