diff options
author | jimw@mysql.com <> | 2005-05-24 11:02:39 -0700 |
---|---|---|
committer | jimw@mysql.com <> | 2005-05-24 11:02:39 -0700 |
commit | bd7775866c9ba18b57033dc910dd87cce6eff7fb (patch) | |
tree | bfe634ca784d5c7471c7c399a337336c426c674f /vio/viossl.c | |
parent | ed2e508bdd92be3a73a06b7ec5c77b367817e9a5 (diff) | |
download | mariadb-git-bd7775866c9ba18b57033dc910dd87cce6eff7fb.tar.gz |
Fix timeouts with SSL on Windows, and also sync the fastsend
implementation with normal socket behavior. (Bug #8572)
Diffstat (limited to 'vio/viossl.c')
-rw-r--r-- | vio/viossl.c | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/vio/viossl.c b/vio/viossl.c index 773d444063b..043d23f0238 100644 --- a/vio/viossl.c +++ b/vio/viossl.c @@ -128,26 +128,32 @@ int vio_ssl_write(Vio * vio, const gptr buf, int size) int vio_ssl_fastsend(Vio * vio __attribute__((unused))) { - int r= 0; + int r=0; DBUG_ENTER("vio_ssl_fastsend"); -#ifdef IPTOS_THROUGHPUT +#if defined(IPTOS_THROUGHPUT) && !defined(__EMX__) { -#ifndef __EMX__ - int tos = IPTOS_THROUGHPUT; - if (!setsockopt(vio->sd, IPPROTO_IP, IP_TOS, (void *) &tos, sizeof(tos))) -#endif /* !__EMX__ */ - { - int nodelay = 1; - if (setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, (void *) &nodelay, - sizeof(nodelay))) { - DBUG_PRINT("warning", - ("Couldn't set socket option for fast send")); - r= -1; - } - } + int tos= IPTOS_THROUGHPUT; + r= setsockopt(vio->sd, IPPROTO_IP, IP_TOS, (void *) &tos, sizeof(tos)); + } +#endif /* IPTOS_THROUGHPUT && !__EMX__ */ + if (!r) + { +#ifdef __WIN__ + BOOL nodelay= 1; + r= setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, (const char*) &nodelay, + sizeof(nodelay)); +#else + int nodelay= 1; + r= setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, (void*) &nodelay, + sizeof(nodelay)); +#endif /* __WIN__ */ + } + if (r) + { + DBUG_PRINT("warning", ("Couldn't set socket option for fast send")); + r= -1; } -#endif /* IPTOS_THROUGHPUT */ DBUG_PRINT("exit", ("%d", r)); DBUG_RETURN(r); } @@ -424,6 +430,11 @@ void vio_ssl_timeout(Vio *vio __attribute__((unused)), uint which __attribute__((unused)), uint timeout __attribute__((unused))) { - /* Not yet implemented (non critical) */ +#ifdef __WIN__ + ulong wait_timeout= (ulong) timeout * 1000; + (void) setsockopt(vio->sd, SOL_SOCKET, + which ? SO_SNDTIMEO : SO_RCVTIMEO, (char*) &wait_timeout, + sizeof(wait_timeout)); +#endif /* __WIN__ */ } #endif /* HAVE_OPENSSL */ |