r3318: generate random STATUS_MORE_ENTRIES errors (1 in 10 packets) as well
authorAndrew Tridgell <tridge@samba.org>
Thu, 28 Oct 2004 11:57:20 +0000 (11:57 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:04:53 +0000 (13:04 -0500)
as randomly short recv/send when socket:testnonblock is enabled
(This used to be commit 718175a265d34bfdbcbf0cc6b55dbf6b389f3194)

source4/lib/socket/socket.c

index 22b40e076c684fad8a72d7e0f25b0858653045a1..9bdd57d2007a349246516ade6c2f3afc4aad2e87 100644 (file)
@@ -158,7 +158,11 @@ NTSTATUS socket_recv(struct socket_context *sock, void *buf,
        }
 
        if ((sock->flags & SOCKET_FLAG_TESTNONBLOCK) && wantlen > 1) {
-               return sock->ops->recv(sock, buf, 1+(random() % (wantlen-1)), nread, flags);
+               if (random() % 10 == 0) {
+                       *nread = 0;
+                       return STATUS_MORE_ENTRIES;
+               }
+               return sock->ops->recv(sock, buf, 1+(random() % wantlen), nread, flags);
        }
 
        return sock->ops->recv(sock, buf, wantlen, nread, flags);
@@ -182,7 +186,11 @@ NTSTATUS socket_send(struct socket_context *sock,
 
        if ((sock->flags & SOCKET_FLAG_TESTNONBLOCK) && blob->length > 1) {
                DATA_BLOB blob2 = *blob;
-               blob2.length = 1+(random() % (blob2.length-1));
+               if (random() % 10 == 0) {
+                       *sendlen = 0;
+                       return STATUS_MORE_ENTRIES;
+               }
+               blob2.length = 1+(random() % blob2.length);
                return sock->ops->send(sock, &blob2, sendlen, flags);
        }