diff --git a/client/mysqltest.cc b/client/mysqltest.cc
index b84d654..6ac4381 100644
--- a/client/mysqltest.cc
+++ b/client/mysqltest.cc
@@ -5986,6 +5986,8 @@ void do_connect(struct st_command *command)
   my_bool con_ssl= 0, con_compress= 0;
   my_bool con_pipe= 0;
   my_bool con_shm __attribute__ ((unused))= 0;
+  int read_timeout= 0;
+  int write_timeout= 0;
   struct st_connection* con_slot;
 
   static DYNAMIC_STRING ds_connection_name;
@@ -6080,6 +6082,16 @@ void do_connect(struct st_command *command)
       con_pipe= 1;
     else if (length == 3 && !strncmp(con_options, "SHM", 3))
       con_shm= 1;
+    else if (strncasecmp(con_options, "read_timeout=",
+                         sizeof("read_timeout=")-1) == 0)
+    {
+      read_timeout= atoi(con_options + sizeof("read_timeout=")-1);
+    }
+    else if (strncasecmp(con_options, "write_timeout=",
+                         sizeof("write_timeout=")-1) == 0)
+    {
+      write_timeout= atoi(con_options + sizeof("write_timeout=")-1);
+    }
     else
       die("Illegal option to connect: %.*s", 
           (int) (end - con_options), con_options);
@@ -6152,6 +6164,18 @@ void do_connect(struct st_command *command)
   if (opt_protocol)
     mysql_options(con_slot->mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol);
 
+  if (read_timeout)
+  {
+    mysql_options(con_slot->mysql, MYSQL_OPT_READ_TIMEOUT,
+                  (char*)&read_timeout);
+  }
+
+  if (write_timeout)
+  {
+    mysql_options(con_slot->mysql, MYSQL_OPT_WRITE_TIMEOUT,
+                  (char*)&write_timeout);
+  }
+
 #ifdef HAVE_SMEM
   if (con_shm)
   {
diff --git a/mysql-test/r/ssl_timeout.result b/mysql-test/r/ssl_timeout.result
new file mode 100644
index 0000000..356e931
--- /dev/null
+++ b/mysql-test/r/ssl_timeout.result
@@ -0,0 +1,7 @@
+# connect with read timeout so SLEEP() should timeout
+# Check ssl turned on
+SHOW STATUS LIKE 'Ssl_cipher';
+Variable_name	Value
+Ssl_cipher	DHE-RSA-AES256-SHA
+SELECT SLEEP(600);
+ERROR HY000: Lost connection to MySQL server during query
diff --git a/mysql-test/t/ssl_timeout.test b/mysql-test/t/ssl_timeout.test
new file mode 100644
index 0000000..183d1f6
--- /dev/null
+++ b/mysql-test/t/ssl_timeout.test
@@ -0,0 +1,20 @@
+--source include/have_ssl_communication.inc
+
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
+--echo # connect with read timeout so SLEEP() should timeout
+connect (ssl_con,localhost,root,,,,,SSL read_timeout=5);
+
+--echo # Check ssl turned on
+SHOW STATUS LIKE 'Ssl_cipher';
+
+# --error CR_SERVER_LOST
+--error 2013
+SELECT SLEEP(600);
+
+connection default;
+disconnect ssl_con;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
diff --git a/vio/vio.c b/vio/vio.c
index 9005dd2..d86ef16 100644
--- a/vio/vio.c
+++ b/vio/vio.c
@@ -276,12 +276,15 @@ my_bool vio_reset(Vio* vio, enum enum_vio_type type,
     Propagate the timeout values. Necessary to also propagate
     the underlying proprieties associated with the timeout,
     such as the socket blocking mode.
+
+    note: old_vio.read_timeout/old_vio.write_timeout is stored in ms
+    but vio_timeout() takes seconds as argument, hence the / 1000
   */
   if (old_vio.read_timeout >= 0)
-    ret|= vio_timeout(vio, 0, old_vio.read_timeout);
+    ret|= vio_timeout(vio, 0, old_vio.read_timeout / 1000);
 
   if (old_vio.write_timeout >= 0)
-    ret|= vio_timeout(vio, 1, old_vio.write_timeout);
+    ret|= vio_timeout(vio, 1, old_vio.write_timeout / 1000);
 
   DBUG_RETURN(MY_TEST(ret));
 }
