> > > > This would then give
> > > >     apr_sockaddr_t *sa;
> > > >     apr_gethostbyname(&sa, "hostname", pool);
> > > >     apr_connect(sock, sa);
> > >
> > > We need to add more arguments: address family for sure and possibly
> > > flags.  Look at getaddrinfo().  And do we want to add an optional
> > > service name/port number parameter?  That would build the complete
> > > sockaddr for us.
> >
> > OK.  Care to suggest the definition?
>
> apr_status_t apr_getaddrinfo(apr_sockaddr_t *sa,
>                              const char *hostname,
>                              apr_int32_t family,
>                              apr_port_t port,
>                              apr_pool_t *p);
>
> hostname is one of three things:
> a) ptr to DNS name
> b) ptr to numeric address string
> c) NULL if we don't have a name/address and just want to build a
>    sockaddr with address INADDR[6]_ANY and some port.

+1 for this and your subsequent patch.

Just a thought, should we define the socket families as APR values?  This
would mean that on a non-v6 platform we could still call create socket with
APR_V6 as a family and we'd just return an error.  Don't know if it makes
sense or not...

Also, do we want to be able to pass in a servicename for the port?
Otherwise I think we should add a function to get the numeric port for a
service name...

>
> family is AF_UNSPEC if we don't care, AF_INET or AF_INET6 otherwise.
> You can't have hostname == NULL and family == AF_UNSPEC.
>
> port will be stored into the new sockaddr; pass zero if you don't
> care.
>
> There is no flags parameter for now, but we may need to allow that
> eventually.

If we think we'll need it should we add it now so we don't break the API
when we do?

>
> > > In addition to the changes you mentioned, I see apr_create_socket() as
> > > extremely important in the short run and I think we should think about
> > > apr_bind() working like apr_connect() (in other words, taking an
> > > apr_sockaddr_t).  That makes sense when the user has told us the local
> > > interface address and we have to resolve it anyway.  We have to keep
> > > it from being painful when we just have the port number.
> >
> > OK, so again care to suggest the API definitions?
>
> I think apr_connect() is good the way it is.
>
> For apr_bind(), I see it looking like apr_connect():
>
>   apr_status_t apr_bind(apr_socket_t *, apr_sockaddr_t *);
>
> Why?

This makes sense.

+1

>
>   This allows an app to use apr_getaddrinfo(), which will allocate a
>   socket address, store the port in the right place, and perhaps
>   handle a local interface address specified by the user.

david

Reply via email to