summaryrefslogtreecommitdiff
path: root/vio
diff options
context:
space:
mode:
authorunknown <msvensson@pilot.blaudden>2007-05-24 20:43:12 +0200
committerunknown <msvensson@pilot.blaudden>2007-05-24 20:43:12 +0200
commit71eb1afef15c103ff096104eef22049b8b4b0957 (patch)
treec8363ff07bf3105b416bf81980b0f9609df81738 /vio
parenta27fd67b512bace048a8c9b0cce7faf5cbbd1373 (diff)
parent945f3c2cc827ca6acc06a1034538f4ec1388ac5b (diff)
downloadmariadb-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.h1
-rw-r--r--vio/viosocket.c42
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
}