Bug #9721 net_write_timeout not used on Windows

Added an extra parameter to all calls to timeout().  
1 means we want to set the write timeout
0 means we wnat to set the read timeout

viossl.c:
  Add which parameter to ssl timeout routine
vio_priv.h:
  Added which parameter to vio_ignore_timeout and vio_ssl_timeout
violite.h:
  Add which parameter to vio_timeout sigs
net_serv.cc:
  Use proper which code in call to vio_timeout to set the proper timeout
viosocket.c:
  Set the appropriate timeout in vio_timeout
parent 9f5a51e8
...@@ -195,6 +195,7 @@ ram@mysql.r18.ru ...@@ -195,6 +195,7 @@ ram@mysql.r18.ru
ram@ram.(none) ram@ram.(none)
ramil@mysql.com ramil@mysql.com
ranger@regul.home.lan ranger@regul.home.lan
rburnett@bk-internal.mysql.com
rburnett@build.mysql.com rburnett@build.mysql.com
reggie@bob.(none) reggie@bob.(none)
reggie@mdk10.(none) reggie@mdk10.(none)
......
...@@ -81,7 +81,7 @@ my_bool vio_peer_addr(Vio* vio, char *buf, uint16 *port); ...@@ -81,7 +81,7 @@ my_bool vio_peer_addr(Vio* vio, char *buf, uint16 *port);
/* Remotes in_addr */ /* Remotes in_addr */
void vio_in_addr(Vio *vio, struct in_addr *in); void vio_in_addr(Vio *vio, struct in_addr *in);
my_bool vio_poll_read(Vio *vio,uint timeout); my_bool vio_poll_read(Vio *vio,uint timeout);
void vio_timeout(Vio *vio,uint timeout); void vio_timeout(Vio *vio,uint which, uint timeout);
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
#include <openssl/opensslv.h> #include <openssl/opensslv.h>
...@@ -149,7 +149,7 @@ int vio_close_shared_memory(Vio * vio); ...@@ -149,7 +149,7 @@ int vio_close_shared_memory(Vio * vio);
#define vio_close(vio) ((vio)->vioclose)(vio) #define vio_close(vio) ((vio)->vioclose)(vio)
#define vio_peer_addr(vio, buf, prt) (vio)->peer_addr(vio, buf, prt) #define vio_peer_addr(vio, buf, prt) (vio)->peer_addr(vio, buf, prt)
#define vio_in_addr(vio, in) (vio)->in_addr(vio, in) #define vio_in_addr(vio, in) (vio)->in_addr(vio, in)
#define vio_timeout(vio, seconds) (vio)->timeout(vio, seconds) #define vio_timeout(vio, which, seconds) (vio)->timeout(vio, which, seconds)
#endif /* defined(HAVE_VIO) && !defined(DONT_MAP_VIO) */ #endif /* defined(HAVE_VIO) && !defined(DONT_MAP_VIO) */
/* This enumerator is used in parser - should be always visible */ /* This enumerator is used in parser - should be always visible */
...@@ -189,7 +189,7 @@ struct st_vio ...@@ -189,7 +189,7 @@ struct st_vio
void (*in_addr)(Vio*, struct in_addr*); void (*in_addr)(Vio*, struct in_addr*);
my_bool (*should_retry)(Vio*); my_bool (*should_retry)(Vio*);
int (*vioclose)(Vio*); int (*vioclose)(Vio*);
void (*timeout)(Vio*, unsigned int timeout); void (*timeout)(Vio*, unsigned int which, unsigned int timeout);
void *ssl_arg; void *ssl_arg;
#ifdef HAVE_SMEM #ifdef HAVE_SMEM
HANDLE handle_file_map; HANDLE handle_file_map;
......
...@@ -491,7 +491,7 @@ net_real_write(NET *net,const char *packet,ulong len) ...@@ -491,7 +491,7 @@ net_real_write(NET *net,const char *packet,ulong len)
thr_alarm(&alarmed,(uint) net->write_timeout,&alarm_buff); thr_alarm(&alarmed,(uint) net->write_timeout,&alarm_buff);
#else #else
alarmed=0; alarmed=0;
vio_timeout(net->vio, net->write_timeout); vio_timeout(net->vio, 1, net->write_timeout);
#endif /* NO_ALARM */ #endif /* NO_ALARM */
pos=(char*) packet; end=pos+len; pos=(char*) packet; end=pos+len;
...@@ -684,7 +684,7 @@ my_real_read(NET *net, ulong *complen) ...@@ -684,7 +684,7 @@ my_real_read(NET *net, ulong *complen)
if (net_blocking) if (net_blocking)
thr_alarm(&alarmed,net->read_timeout,&alarm_buff); thr_alarm(&alarmed,net->read_timeout,&alarm_buff);
#else #else
vio_timeout(net->vio, net->read_timeout); vio_timeout(net->vio, 0, net->read_timeout);
#endif /* NO_ALARM */ #endif /* NO_ALARM */
pos = net->buff + net->where_b; /* net->packet -4 */ pos = net->buff + net->where_b; /* net->packet -4 */
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include <m_string.h> #include <m_string.h>
#include <violite.h> #include <violite.h>
void vio_ignore_timeout(Vio *vio, uint timeout); void vio_ignore_timeout(Vio *vio, uint which, uint timeout);
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
#include "my_net.h" /* needed because of struct in_addr */ #include "my_net.h" /* needed because of struct in_addr */
...@@ -31,7 +31,7 @@ void vio_ignore_timeout(Vio *vio, uint timeout); ...@@ -31,7 +31,7 @@ void vio_ignore_timeout(Vio *vio, uint timeout);
void vio_ssl_delete(Vio* vio); void vio_ssl_delete(Vio* vio);
int vio_ssl_read(Vio *vio,gptr buf, int size); int vio_ssl_read(Vio *vio,gptr buf, int size);
int vio_ssl_write(Vio *vio,const gptr buf,int size); int vio_ssl_write(Vio *vio,const gptr buf,int size);
void vio_ssl_timeout(Vio *vio, uint timeout); void vio_ssl_timeout(Vio *vio, uint which, uint timeout);
/* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible. */ /* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible. */
int vio_ssl_fastsend(Vio *vio); int vio_ssl_fastsend(Vio *vio);
......
...@@ -318,11 +318,16 @@ my_bool vio_poll_read(Vio *vio,uint timeout) ...@@ -318,11 +318,16 @@ my_bool vio_poll_read(Vio *vio,uint timeout)
void vio_timeout(Vio *vio __attribute__((unused)), void vio_timeout(Vio *vio __attribute__((unused)),
uint timeout __attribute__((unused))) uint which __attribute__((unused)),
uint timeout __attribute__((unused)))
{ {
#ifdef __WIN__ #ifdef __WIN__
ulong wait_timeout= (ulong) timeout * 1000; ulong wait_timeout= (ulong) timeout * 1000;
(void) setsockopt(vio->sd, SOL_SOCKET, SO_RCVTIMEO, (char*) &wait_timeout, if (which == 0)
(void) setsockopt(vio->sd, SOL_SOCKET, SO_RCVTIMEO, (char*) &wait_timeout,
sizeof(wait_timeout));
else
(void) setsockopt(vio->sd, SOL_SOCKET, SO_SNDTIMEO, (char*) &wait_timeout,
sizeof(wait_timeout)); sizeof(wait_timeout));
#endif /* __WIN__ */ #endif /* __WIN__ */
} }
......
...@@ -421,7 +421,8 @@ int vio_ssl_blocking(Vio * vio __attribute__((unused)), ...@@ -421,7 +421,8 @@ int vio_ssl_blocking(Vio * vio __attribute__((unused)),
void vio_ssl_timeout(Vio *vio __attribute__((unused)), void vio_ssl_timeout(Vio *vio __attribute__((unused)),
uint timeout __attribute__((unused))) uint which __attribute__((unused)),
uint timeout __attribute__((unused)))
{ {
/* Not yet implemented (non critical) */ /* Not yet implemented (non critical) */
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment