mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
Fix timeouts with SSL on Windows, and also sync the fastsend
implementation with normal socket behavior. (Bug #8572)
This commit is contained in:
parent
ed2e508bdd
commit
bd7775866c
1 changed files with 28 additions and 17 deletions
45
vio/viossl.c
45
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 */
|
||||
|
|
Loading…
Reference in a new issue