Merge commit '9835bc0' into dtls

* commit '9835bc0':
  Fix racy test.
  Fix stupid error in previous commit
  Don't check errors on ssl_close_notify()
  Fix char signedness issue
  Fix issue with non-blocking I/O & record splitting
  Fix warning

Conflicts:
	programs/ssl/ssl_client2.c
	programs/ssl/ssl_server2.c
diff --git a/include/polarssl/ssl.h b/include/polarssl/ssl.h
index 26110d8..37d7e13 100644
--- a/include/polarssl/ssl.h
+++ b/include/polarssl/ssl.h
@@ -947,7 +947,7 @@
     unsigned char mfl_code;     /*!< MaxFragmentLength chosen by us   */
 #endif /* POLARSSL_SSL_MAX_FRAGMENT_LENGTH */
 #if defined(POLARSSL_SSL_CBC_RECORD_SPLITTING)
-    char split_done;            /*!< flag for record splitting:
+    signed char split_done;     /*!< flag for record splitting:
                                      -1 disabled, 0 todo, 1 done      */
 #endif
 
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index 12ee22e..413582a 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -6430,17 +6430,14 @@
 
     if( ssl->split_done == 0 )
     {
-        ssl->split_done = 1;
-        if( ( ret = ssl_write_real( ssl, buf, 1 ) ) < 0 )
+        if( ( ret = ssl_write_real( ssl, buf, 1 ) ) <= 0 )
             return( ret );
+        ssl->split_done = 1;
     }
 
-    if( ssl->split_done == 1 )
-    {
-        ssl->split_done = 0;
-        if( ( ret = ssl_write_real( ssl, buf + 1, len - 1 ) ) < 0 )
-            return( ret );
-    }
+    if( ( ret = ssl_write_real( ssl, buf + 1, len - 1 ) ) <= 0 )
+        return( ret );
+    ssl->split_done = 0;
 
     return( ret + 1 );
 }
diff --git a/programs/ssl/ssl_server2.c b/programs/ssl/ssl_server2.c
index f2beaf1..fb2327a 100644
--- a/programs/ssl/ssl_server2.c
+++ b/programs/ssl/ssl_server2.c
@@ -2070,7 +2070,7 @@
 
     buf[written] = '\0';
     printf( " %d bytes written in %d fragments\n\n%s\n", written, frags, (char *) buf );
-
+    ret = 0;
 
     /*
      * 7b. Continue doing data exchanges?
diff --git a/tests/ssl-opt.sh b/tests/ssl-opt.sh
index 3099adc..3aeef96 100755
--- a/tests/ssl-opt.sh
+++ b/tests/ssl-opt.sh
@@ -847,6 +847,15 @@
             -S "Read from client: 1 bytes read" \
             -S "122 bytes read"
 
+run_test    "CBC Record splitting: TLS 1.0, splitting, nbio" \
+            "$P_SRV nbio=2" \
+            "$P_CLI nbio=2 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA \
+             request_size=123 force_version=tls1" \
+            0 \
+            -S "Read from client: 123 bytes read" \
+            -s "Read from client: 1 bytes read" \
+            -s "122 bytes read"
+
 # Tests for Session Tickets
 
 run_test    "Session resume using tickets: basic" \
@@ -1241,9 +1250,10 @@
             -S "SSL - An unexpected message was received from our peer" \
             -S "failed"
 
+# one extra exchange to be able to complete renego
 run_test    "Renegotiation: periodic, just above period" \
             "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3" \
-            "$P_CLI debug_level=3 exchanges=3 renegotiation=1" \
+            "$P_CLI debug_level=3 exchanges=4 renegotiation=1" \
             0 \
             -c "client hello, adding renegotiation extension" \
             -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
@@ -1259,7 +1269,7 @@
 
 run_test    "Renegotiation: periodic, two times period" \
             "$P_SRV debug_level=3 exchanges=9 renegotiation=1 renego_period=3" \
-            "$P_CLI debug_level=3 exchanges=6 renegotiation=1" \
+            "$P_CLI debug_level=3 exchanges=7 renegotiation=1" \
             0 \
             -c "client hello, adding renegotiation extension" \
             -s "received TLS_EMPTY_RENEGOTIATION_INFO" \