diff options
author | unknown <msvensson@pilot.blaudden> | 2007-05-24 20:43:12 +0200 |
---|---|---|
committer | unknown <msvensson@pilot.blaudden> | 2007-05-24 20:43:12 +0200 |
commit | 71eb1afef15c103ff096104eef22049b8b4b0957 (patch) | |
tree | c8363ff07bf3105b416bf81980b0f9609df81738 /vio | |
parent | a27fd67b512bace048a8c9b0cce7faf5cbbd1373 (diff) | |
parent | 945f3c2cc827ca6acc06a1034538f4ec1388ac5b (diff) | |
download | mariadb-git-71eb1afef15c103ff096104eef22049b8b4b0957.tar.gz |
Merge pilot.blaudden:/home/msvensson/mysql/bug26664/my50-bug26664
into pilot.blaudden:/home/msvensson/mysql/bug26664/my51-bug26664
include/mysql_com.h:
Auto merged
include/violite.h:
Auto merged
libmysql/libmysql.c:
Auto merged
server-tools/instance-manager/mysql_connection.cc:
Auto merged
sql-common/client.c:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/net_serv.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
vio/viosocket.c:
Auto merged
sql/sql_parse.cc:
Merge 5.0->5.1
Diffstat (limited to 'vio')
-rw-r--r-- | vio/vio_priv.h | 1 | ||||
-rw-r--r-- | vio/viosocket.c | 42 |
2 files changed, 28 insertions, 15 deletions
diff --git a/vio/vio_priv.h b/vio/vio_priv.h index 4a272e519a3..9036952d575 100644 --- a/vio/vio_priv.h +++ b/vio/vio_priv.h @@ -23,6 +23,7 @@ #include <violite.h> void vio_ignore_timeout(Vio *vio, uint which, uint timeout); +void vio_timeout(Vio *vio,uint which, uint timeout); #ifdef HAVE_OPENSSL #include "my_net.h" /* needed because of struct in_addr */ diff --git a/vio/viosocket.c b/vio/viosocket.c index d3a479edac3..058230b8124 100644 --- a/vio/viosocket.c +++ b/vio/viosocket.c @@ -203,13 +203,14 @@ int vio_fastsend(Vio * vio __attribute__((unused))) { #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, +#endif + + r= setsockopt(vio->sd, IPPROTO_TCP, TCP_NODELAY, + IF_WIN(const char*, void*) &nodelay, sizeof(nodelay)); -#endif /* __WIN__ */ + } if (r) { @@ -379,28 +380,39 @@ my_bool vio_poll_read(Vio *vio,uint timeout) 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) + int r; + DBUG_ENTER("vio_timeout"); + { #ifdef __WIN__ - - /* Windows expects time in milliseconds as int. */ + /* Windows expects time in milliseconds as int */ int wait_timeout= (int) timeout * 1000; - -#else /* ! __WIN__ */ - +#else /* POSIX specifies time as struct timeval. */ struct timeval wait_timeout; wait_timeout.tv_sec= timeout; wait_timeout.tv_usec= 0; +#endif + + r= setsockopt(vio->sd, SOL_SOCKET, which ? SO_SNDTIMEO : SO_RCVTIMEO, + IF_WIN(const char*, const void*)&wait_timeout, + sizeof(wait_timeout)); -#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)); +#ifndef DBUG_OFF + if (r != 0) + DBUG_PRINT("error", ("setsockopt failed: %d, errno: %d", r, socket_errno)); +#endif -#endif /* defined(SO_SNDTIMEO) && defined(SO_RCVTIMEO) */ + DBUG_VOID_RETURN; +#else +/* + Platforms not suporting setting of socket timeout should either use + thr_alarm or just run without read/write timeout(s) +*/ +#endif } |