mirror of
https://github.com/MariaDB/server.git
synced 2026-05-06 23:25:34 +02:00
BUG#9678: Client library hangs after network communication failure
Socket timeouts in client library were used only on Windows. The solution is to use socket timeouts in client library on all systems were they are supported. No test case is provided because it is impossible to simulate network failure in current test suit. sql/net_serv.cc: Retry indefinitely only if got EINTR. vio/viosocket.c: Set socket timeouts on POSIX systems as well as on Windows.
This commit is contained in:
parent
04d60b3897
commit
32741794a3
2 changed files with 23 additions and 9 deletions
|
|
@ -333,16 +333,30 @@ my_bool vio_poll_read(Vio *vio,uint timeout)
|
|||
}
|
||||
|
||||
|
||||
void vio_timeout(Vio *vio __attribute__((unused)),
|
||||
uint which __attribute__((unused)),
|
||||
uint timeout __attribute__((unused)))
|
||||
void vio_timeout(Vio *vio, uint which, uint timeout)
|
||||
{
|
||||
/* TODO: some action should be taken if socket timeouts are not supported. */
|
||||
#if defined(SO_SNDTIMEO) && defined(SO_RCVTIMEO)
|
||||
|
||||
#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__ */
|
||||
|
||||
/* Windows expects time in milliseconds as int. */
|
||||
int wait_timeout= (int) timeout * 1000;
|
||||
|
||||
#else /* ! __WIN__ */
|
||||
|
||||
/* POSIX specifies time as struct timeval. */
|
||||
struct timeval wait_timeout;
|
||||
wait_timeout.tv_sec= timeout;
|
||||
wait_timeout.tv_usec= 0;
|
||||
|
||||
#endif /* ! __WIN__ */
|
||||
|
||||
/* TODO: return value should be checked. */
|
||||
(void) setsockopt(vio->sd, SOL_SOCKET, which ? SO_SNDTIMEO : SO_RCVTIMEO,
|
||||
(char*) &wait_timeout, sizeof(wait_timeout));
|
||||
|
||||
#endif /* defined(SO_SNDTIMEO) && defined(SO_RCVTIMEO) */
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue