static SmartPtr<Socket> create_new_socket( const HostURL &hosturl, Variant &errnum, Variant &errstr ) { int domain = hosturl.isIPv6() ? AF_INET6 : AF_INET; int type = SOCK_STREAM; const std::string scheme = hosturl.getScheme(); if (scheme == "udp" || scheme == "udg") { type = SOCK_DGRAM; } else if (scheme == "unix") { domain = AF_UNIX; } auto sock = makeSmartPtr<Socket>( socket(domain, type, 0), domain, hosturl.getHost().c_str(), hosturl.getPort() ); if (!sock->valid()) { SOCKET_ERROR(sock, "unable to create socket", errno); errnum = sock->getError(); errstr = HHVM_FN(socket_strerror)(sock->getError()); sock.reset(); } return sock; }
static bool create_new_socket(const HostURL &hosturl, Variant &errnum, Variant &errstr, Resource &ret, Socket *&sock) { int domain = hosturl.isIPv6() ? AF_INET6 : AF_INET; int type = SOCK_STREAM; const std::string scheme = hosturl.getScheme(); if (scheme == "udp" || scheme == "udg") { type = SOCK_DGRAM; } else if (scheme == "unix") { domain = AF_UNIX; } sock = new Socket(socket(domain, type, 0), domain, hosturl.getHost().c_str(), hosturl.getPort()); ret = Resource(sock); if (!sock->valid()) { SOCKET_ERROR(sock, "unable to create socket", errno); errnum = sock->getError(); errstr = HHVM_FN(socket_strerror)(sock->getError()); return false; } return true; }