|
@@ -27,7 +27,7 @@
|
|
|
|
|
|
/* Helper function to create a BIO connected to the server */
|
|
|
static BIO *create_socket_bio(const char *hostname, const char *port,
|
|
|
- BIO_ADDR **peer_addr)
|
|
|
+ int family, BIO_ADDR **peer_addr)
|
|
|
{
|
|
|
int sock = -1;
|
|
|
BIO_ADDRINFO *res;
|
|
@@ -37,7 +37,7 @@ static BIO *create_socket_bio(const char *hostname, const char *port,
|
|
|
/*
|
|
|
* Lookup IP address info for the server.
|
|
|
*/
|
|
|
- if (!BIO_lookup_ex(hostname, port, BIO_LOOKUP_CLIENT, 0, SOCK_DGRAM, 0,
|
|
|
+ if (!BIO_lookup_ex(hostname, port, BIO_LOOKUP_CLIENT, family, SOCK_DGRAM, 0,
|
|
|
&res))
|
|
|
return NULL;
|
|
|
|
|
@@ -148,14 +148,24 @@ int main(int argc, char *argv[])
|
|
|
char buf[160];
|
|
|
BIO_ADDR *peer_addr = NULL;
|
|
|
char *hostname, *port;
|
|
|
+ int argnext = 1;
|
|
|
+ int ipv6 = 0;
|
|
|
|
|
|
- if (argc != 3) {
|
|
|
- printf("Usage: quic-client-non-block hostname port\n");
|
|
|
+ if (argc < 3) {
|
|
|
+ printf("Usage: quic-client-non-block [-6] hostname port\n");
|
|
|
goto end;
|
|
|
}
|
|
|
|
|
|
- hostname = argv[1];
|
|
|
- port = argv[2];
|
|
|
+ if (!strcmp(argv[argnext], "-6")) {
|
|
|
+ if (argc < 4) {
|
|
|
+ printf("Usage: quic-client-non-block [-6] hostname port\n");
|
|
|
+ goto end;
|
|
|
+ }
|
|
|
+ ipv6 = 1;
|
|
|
+ argnext++;
|
|
|
+ }
|
|
|
+ hostname = argv[argnext++];
|
|
|
+ port = argv[argnext];
|
|
|
|
|
|
/*
|
|
|
* Create an SSL_CTX which we can use to create SSL objects from. We
|
|
@@ -201,7 +211,7 @@ int main(int argc, char *argv[])
|
|
|
* Create the underlying transport socket/BIO and associate it with the
|
|
|
* connection.
|
|
|
*/
|
|
|
- bio = create_socket_bio(hostname, port, &peer_addr);
|
|
|
+ bio = create_socket_bio(hostname, port, ipv6 ? AF_INET6 : AF_INET, &peer_addr);
|
|
|
if (bio == NULL) {
|
|
|
printf("Failed to crete the BIO\n");
|
|
|
goto end;
|