Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(511)

Side by Side Diff: native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc

Issue 99813004: [NaCl SDK] nacl_io: implement set/getsockopt for TCP_NODELAY. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « native_client_sdk/src/libraries/nacl_io/ossocket.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <arpa/inet.h> 5 #include <arpa/inet.h>
6 #include <errno.h> 6 #include <errno.h>
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <netinet/in.h> 8 #include <netinet/in.h>
9 #include <pthread.h> 9 #include <pthread.h>
10 #include <sys/types.h> 10 #include <sys/types.h>
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 char inbuf[512]; 337 char inbuf[512];
338 338
339 memset(outbuf, 1, sizeof(outbuf)); 339 memset(outbuf, 1, sizeof(outbuf));
340 340
341 sockaddr_in addr; 341 sockaddr_in addr;
342 socklen_t addrlen = sizeof(addr); 342 socklen_t addrlen = sizeof(addr);
343 343
344 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr); 344 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr);
345 345
346 ASSERT_EQ(0, ki_connect(sock_, (sockaddr*) &addr, addrlen)) 346 ASSERT_EQ(0, ki_connect(sock_, (sockaddr*) &addr, addrlen))
347 << "Failed with " << errno << ": " << strerror(errno) << "\n"; 347 << "Failed with " << errno << ": " << strerror(errno);
348 348
349 // Send two different messages to the echo server and verify the 349 // Send two different messages to the echo server and verify the
350 // response matches. 350 // response matches.
351 strcpy(outbuf, "hello"); 351 strcpy(outbuf, "hello");
352 memset(inbuf, 0, sizeof(inbuf)); 352 memset(inbuf, 0, sizeof(inbuf));
353 ASSERT_EQ(sizeof(outbuf), ki_write(sock_, outbuf, sizeof(outbuf))) 353 ASSERT_EQ(sizeof(outbuf), ki_write(sock_, outbuf, sizeof(outbuf)))
354 << "socket write failed with: " << strerror(errno); 354 << "socket write failed with: " << strerror(errno);
355 ASSERT_EQ(sizeof(outbuf), ki_read(sock_, inbuf, sizeof(inbuf))); 355 ASSERT_EQ(sizeof(outbuf), ki_read(sock_, inbuf, sizeof(inbuf)));
356 EXPECT_EQ(0, memcmp(outbuf, inbuf, sizeof(outbuf))); 356 EXPECT_EQ(0, memcmp(outbuf, inbuf, sizeof(outbuf)));
357 357
(...skipping 11 matching lines...) Expand all
369 memset(outbuf, 1, sizeof(outbuf)); 369 memset(outbuf, 1, sizeof(outbuf));
370 370
371 sockaddr_in addr; 371 sockaddr_in addr;
372 socklen_t addrlen = sizeof(addr); 372 socklen_t addrlen = sizeof(addr);
373 373
374 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr); 374 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr);
375 375
376 SetNonBlocking(sock_); 376 SetNonBlocking(sock_);
377 ASSERT_EQ(-1, ki_connect(sock_, (sockaddr*) &addr, addrlen)); 377 ASSERT_EQ(-1, ki_connect(sock_, (sockaddr*) &addr, addrlen));
378 ASSERT_EQ(EINPROGRESS, errno) 378 ASSERT_EQ(EINPROGRESS, errno)
379 << "expected EINPROGRESS but got: " << strerror(errno) << "\n"; 379 << "expected EINPROGRESS but got: " << strerror(errno);
380 ASSERT_EQ(-1, ki_connect(sock_, (sockaddr*) &addr, addrlen)); 380 ASSERT_EQ(-1, ki_connect(sock_, (sockaddr*) &addr, addrlen));
381 ASSERT_EQ(EALREADY, errno); 381 ASSERT_EQ(EALREADY, errno);
382 382
383 // Wait for the socket connection to complete using poll() 383 // Wait for the socket connection to complete using poll()
384 struct pollfd pollfd = { sock_, POLLIN|POLLOUT, 0 }; 384 struct pollfd pollfd = { sock_, POLLIN|POLLOUT, 0 };
385 ASSERT_EQ(1, ki_poll(&pollfd, 1, -1)); 385 ASSERT_EQ(1, ki_poll(&pollfd, 1, -1));
386 ASSERT_EQ(POLLOUT, pollfd.revents); 386 ASSERT_EQ(POLLOUT, pollfd.revents);
387 387
388 // Attempts to connect again should yield EISCONN 388 // Attempts to connect again should yield EISCONN
389 ASSERT_EQ(-1, ki_connect(sock_, (sockaddr*) &addr, addrlen)); 389 ASSERT_EQ(-1, ki_connect(sock_, (sockaddr*) &addr, addrlen));
(...skipping 23 matching lines...) Expand all
413 TEST_F(SocketTest, Setsockopt) { 413 TEST_F(SocketTest, Setsockopt) {
414 sock1_ = ki_socket(AF_INET, SOCK_STREAM, 0); 414 sock1_ = ki_socket(AF_INET, SOCK_STREAM, 0);
415 EXPECT_GT(sock1_, -1); 415 EXPECT_GT(sock1_, -1);
416 416
417 // It should not be possible to set SO_ERROR using setsockopt. 417 // It should not be possible to set SO_ERROR using setsockopt.
418 int socket_error = 10; 418 int socket_error = 10;
419 socklen_t len = sizeof(socket_error); 419 socklen_t len = sizeof(socket_error);
420 ASSERT_EQ(-1, ki_setsockopt(sock1_, SOL_SOCKET, SO_ERROR, 420 ASSERT_EQ(-1, ki_setsockopt(sock1_, SOL_SOCKET, SO_ERROR,
421 &socket_error, len)); 421 &socket_error, len));
422 ASSERT_EQ(ENOPROTOOPT, errno); 422 ASSERT_EQ(ENOPROTOOPT, errno);
423 }
423 424
425 TEST_F(SocketTest, Sockopt_TCP_NODELAY) {
426 int option = 0;
427 socklen_t len = sizeof(option);
428 // Getting and setting TCP_NODELAY on UDP socket should fail
429 sock1_ = socket(AF_INET, SOCK_DGRAM, 0);
430 ASSERT_EQ(-1, ki_setsockopt(sock1_, IPPROTO_TCP, TCP_NODELAY, &option, len));
431 ASSERT_EQ(ENOPROTOOPT, errno);
432 ASSERT_EQ(-1, ki_getsockopt(sock1_, IPPROTO_TCP, TCP_NODELAY, &option, &len));
433 ASSERT_EQ(ENOPROTOOPT, errno);
434
435 // Getting and setting TCP_NODELAY on TCP socket should preserve value
436 sock2_ = socket(AF_INET, SOCK_STREAM, 0);
437 ASSERT_EQ(0, ki_getsockopt(sock2_, IPPROTO_TCP, TCP_NODELAY, &option, &len));
438 ASSERT_EQ(0, option);
439 ASSERT_EQ(sizeof(option), len);
440
441 option = 1;
442 len = sizeof(option);
443 ASSERT_EQ(0, ki_setsockopt(sock2_, IPPROTO_TCP, TCP_NODELAY, &option, len))
444 << "Failed with " << errno << ": " << strerror(errno);
445 ASSERT_EQ(1, option);
424 } 446 }
425 447
426 TEST_F(SocketTest, Sockopt_KEEPALIVE) { 448 TEST_F(SocketTest, Sockopt_KEEPALIVE) {
427 sock1_ = ki_socket(AF_INET, SOCK_STREAM, 0); 449 sock1_ = ki_socket(AF_INET, SOCK_STREAM, 0);
428 ASSERT_GT(sock1_, -1); 450 ASSERT_GT(sock1_, -1);
429 sock2_ = ki_socket(AF_INET, SOCK_DGRAM, 0); 451 sock2_ = ki_socket(AF_INET, SOCK_DGRAM, 0);
430 ASSERT_GT(sock2_, -1); 452 ASSERT_GT(sock2_, -1);
431 453
432 int value = 0; 454 int value = 0;
433 socklen_t len = sizeof(value); 455 socklen_t len = sizeof(value);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 int* inbuf_int = (int*)inbuf; 527 int* inbuf_int = (int*)inbuf;
506 for (int i = 0; i < LARGE_SEND_BYTES/sizeof(int); i++) { 528 for (int i = 0; i < LARGE_SEND_BYTES/sizeof(int); i++) {
507 outbuf_int[i] = i; 529 outbuf_int[i] = i;
508 } 530 }
509 531
510 sockaddr_in addr; 532 sockaddr_in addr;
511 socklen_t addrlen = sizeof(addr); 533 socklen_t addrlen = sizeof(addr);
512 534
513 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr); 535 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr);
514 ASSERT_EQ(0, ki_connect(sock_, (sockaddr*) &addr, addrlen)) 536 ASSERT_EQ(0, ki_connect(sock_, (sockaddr*) &addr, addrlen))
515 << "Failed with " << errno << ": " << strerror(errno) << "\n"; 537 << "Failed with " << errno << ": " << strerror(errno);
516 538
517 // Call send an recv until all bytes have been transfered. 539 // Call send an recv until all bytes have been transfered.
518 while (bytes_received < LARGE_SEND_BYTES) { 540 while (bytes_received < LARGE_SEND_BYTES) {
519 if (bytes_sent < LARGE_SEND_BYTES) { 541 if (bytes_sent < LARGE_SEND_BYTES) {
520 int sent = ki_send(sock_, outbuf + bytes_sent, 542 int sent = ki_send(sock_, outbuf + bytes_sent,
521 LARGE_SEND_BYTES - bytes_sent, MSG_DONTWAIT); 543 LARGE_SEND_BYTES - bytes_sent, MSG_DONTWAIT);
522 if (sent < 0) 544 if (sent < 0)
523 ASSERT_EQ(EWOULDBLOCK, errno) << "send failed: " << strerror(errno); 545 ASSERT_EQ(EWOULDBLOCK, errno) << "send failed: " << strerror(errno);
524 else 546 else
525 bytes_sent += sent; 547 bytes_sent += sent;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 // Bind and Listen 603 // Bind and Listen
582 ASSERT_EQ(0, Bind(server_sock, LOCAL_HOST, PORT1)); 604 ASSERT_EQ(0, Bind(server_sock, LOCAL_HOST, PORT1));
583 ASSERT_EQ(0, ki_listen(server_sock, 10)) 605 ASSERT_EQ(0, ki_listen(server_sock, 10))
584 << "listen failed with: " << strerror(errno); 606 << "listen failed with: " << strerror(errno);
585 607
586 // Connect to listening socket, and send greeting 608 // Connect to listening socket, and send greeting
587 int client_sock = sock2_; 609 int client_sock = sock2_;
588 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr); 610 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr);
589 addrlen = sizeof(addr); 611 addrlen = sizeof(addr);
590 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen)) 612 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen))
591 << "Failed with " << errno << ": " << strerror(errno) << "\n"; 613 << "Failed with " << errno << ": " << strerror(errno);
592 614
593 ASSERT_EQ(greeting_len, ki_send(client_sock, client_greeting, 615 ASSERT_EQ(greeting_len, ki_send(client_sock, client_greeting,
594 greeting_len, 0)); 616 greeting_len, 0));
595 617
596 // Pass in addrlen that is larger than our actual address to make 618 // Pass in addrlen that is larger than our actual address to make
597 // sure that it is correctly set back to sizeof(sockaddr_in) 619 // sure that it is correctly set back to sizeof(sockaddr_in)
598 addrlen = sizeof(addr) + 10; 620 addrlen = sizeof(addr) + 10;
599 int new_socket = accept(server_sock, (sockaddr*)&addr, &addrlen); 621 int new_socket = accept(server_sock, (sockaddr*)&addr, &addrlen);
600 ASSERT_GT(new_socket, -1) 622 ASSERT_GT(new_socket, -1)
601 << "accept failed with " << errno << ": " << strerror(errno) << "\n"; 623 << "accept failed with " << errno << ": " << strerror(errno);
602 624
603 // Verify addr and addrlen were set correctly 625 // Verify addr and addrlen were set correctly
604 ASSERT_EQ(addrlen, sizeof(sockaddr_in)); 626 ASSERT_EQ(addrlen, sizeof(sockaddr_in));
605 sockaddr_in client_addr; 627 sockaddr_in client_addr;
606 ASSERT_EQ(0, ki_getsockname(client_sock, (sockaddr*)&client_addr, &addrlen)); 628 ASSERT_EQ(0, ki_getsockname(client_sock, (sockaddr*)&client_addr, &addrlen));
607 ASSERT_EQ(client_addr.sin_family, addr.sin_family); 629 ASSERT_EQ(client_addr.sin_family, addr.sin_family);
608 ASSERT_EQ(client_addr.sin_port, addr.sin_port); 630 ASSERT_EQ(client_addr.sin_port, addr.sin_port);
609 ASSERT_EQ(client_addr.sin_addr.s_addr, addr.sin_addr.s_addr); 631 ASSERT_EQ(client_addr.sin_addr.s_addr, addr.sin_addr.s_addr);
610 632
611 // Recv greeting from client and send reply 633 // Recv greeting from client and send reply
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 // not readable to indicate that no connections are available 667 // not readable to indicate that no connections are available
646 // to accept. 668 // to accept.
647 struct pollfd pollfd = { server_sock, POLLIN|POLLOUT, 0 }; 669 struct pollfd pollfd = { server_sock, POLLIN|POLLOUT, 0 };
648 ASSERT_EQ(0, ki_poll(&pollfd, 1, 0)); 670 ASSERT_EQ(0, ki_poll(&pollfd, 1, 0));
649 671
650 // Connect to listening socket 672 // Connect to listening socket
651 int client_sock = sock2_; 673 int client_sock = sock2_;
652 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr); 674 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr);
653 addrlen = sizeof(addr); 675 addrlen = sizeof(addr);
654 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen)) 676 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen))
655 << "Failed with " << errno << ": " << strerror(errno) << "\n"; 677 << "Failed with " << errno << ": " << strerror(errno);
656 678
657 // Not poll again but with an infintie timeout. 679 // Not poll again but with an infintie timeout.
658 pollfd.fd = server_sock; 680 pollfd.fd = server_sock;
659 pollfd.events = POLLIN | POLLOUT; 681 pollfd.events = POLLIN | POLLOUT;
660 ASSERT_EQ(1, ki_poll(&pollfd, 1, -1)); 682 ASSERT_EQ(1, ki_poll(&pollfd, 1, -1));
661 683
662 // Now non-blocking accept should return the new socket 684 // Now non-blocking accept should return the new socket
663 int new_socket = accept(server_sock, (sockaddr*)&addr, &addrlen); 685 int new_socket = accept(server_sock, (sockaddr*)&addr, &addrlen);
664 ASSERT_NE(-1, new_socket) 686 ASSERT_NE(-1, new_socket)
665 << "accept failed with: " << strerror(errno) << "\n"; 687 << "accept failed with: " << strerror(errno);
666 ASSERT_EQ(0, ki_close(new_socket)); 688 ASSERT_EQ(0, ki_close(new_socket));
667 689
668 // Accept calls should once again fail with EAGAIN 690 // Accept calls should once again fail with EAGAIN
669 ASSERT_EQ(-1, accept(server_sock, (sockaddr*)&addr, &addrlen)); 691 ASSERT_EQ(-1, accept(server_sock, (sockaddr*)&addr, &addrlen));
670 ASSERT_EQ(EAGAIN, errno); 692 ASSERT_EQ(EAGAIN, errno);
671 693
672 // As should polling the listening socket 694 // As should polling the listening socket
673 pollfd.fd = server_sock; 695 pollfd.fd = server_sock;
674 pollfd.events = POLLIN | POLLOUT; 696 pollfd.events = POLLIN | POLLOUT;
675 ASSERT_EQ(0, ki_poll(&pollfd, 1, 0)); 697 ASSERT_EQ(0, ki_poll(&pollfd, 1, 0));
676 } 698 }
677 699
678 TEST_F(SocketTestTCP, SendRecvAfterRemoteShutdown) { 700 TEST_F(SocketTestTCP, SendRecvAfterRemoteShutdown) {
679 sockaddr_in addr; 701 sockaddr_in addr;
680 socklen_t addrlen = sizeof(addr); 702 socklen_t addrlen = sizeof(addr);
681 703
682 int server_sock = sock1_; 704 int server_sock = sock1_;
683 int client_sock = sock2_; 705 int client_sock = sock2_;
684 706
685 // bind and listen 707 // bind and listen
686 ASSERT_EQ(0, Bind(server_sock, LOCAL_HOST, PORT1)); 708 ASSERT_EQ(0, Bind(server_sock, LOCAL_HOST, PORT1));
687 ASSERT_EQ(0, ki_listen(server_sock, 10)) 709 ASSERT_EQ(0, ki_listen(server_sock, 10))
688 << "listen failed with: " << strerror(errno); 710 << "listen failed with: " << strerror(errno);
689 711
690 // connect to listening socket 712 // connect to listening socket
691 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr); 713 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr);
692 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen)) 714 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen))
693 << "Failed with " << errno << ": " << strerror(errno) << "\n"; 715 << "Failed with " << errno << ": " << strerror(errno);
694 716
695 addrlen = sizeof(addr); 717 addrlen = sizeof(addr);
696 int new_sock = accept(server_sock, (sockaddr*)&addr, &addrlen); 718 int new_sock = accept(server_sock, (sockaddr*)&addr, &addrlen);
697 ASSERT_NE(-1, new_sock); 719 ASSERT_NE(-1, new_sock);
698 720
699 const char* send_buf = "hello world"; 721 const char* send_buf = "hello world";
700 ASSERT_EQ(strlen(send_buf), ki_send(new_sock, send_buf, strlen(send_buf), 0)); 722 ASSERT_EQ(strlen(send_buf), ki_send(new_sock, send_buf, strlen(send_buf), 0));
701 723
702 // Recv first 10 bytes 724 // Recv first 10 bytes
703 char buf[256]; 725 char buf[256];
(...skipping 21 matching lines...) Expand all
725 int client_sock = sock2_; 747 int client_sock = sock2_;
726 748
727 // bind and listen 749 // bind and listen
728 ASSERT_EQ(0, Bind(server_sock, LOCAL_HOST, PORT1)); 750 ASSERT_EQ(0, Bind(server_sock, LOCAL_HOST, PORT1));
729 ASSERT_EQ(0, ki_listen(server_sock, 10)) 751 ASSERT_EQ(0, ki_listen(server_sock, 10))
730 << "listen failed with: " << strerror(errno); 752 << "listen failed with: " << strerror(errno);
731 753
732 // connect to listening socket 754 // connect to listening socket
733 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr); 755 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr);
734 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen)) 756 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen))
735 << "Failed with " << errno << ": " << strerror(errno) << "\n"; 757 << "Failed with " << errno << ": " << strerror(errno);
736 758
737 addrlen = sizeof(addr); 759 addrlen = sizeof(addr);
738 int new_sock = accept(server_sock, (sockaddr*)&addr, &addrlen); 760 int new_sock = accept(server_sock, (sockaddr*)&addr, &addrlen);
739 ASSERT_NE(-1, new_sock); 761 ASSERT_NE(-1, new_sock);
740 762
741 // Close the new socket 763 // Close the new socket
742 ASSERT_EQ(0, ki_shutdown(client_sock, SHUT_RDWR)); 764 ASSERT_EQ(0, ki_shutdown(client_sock, SHUT_RDWR));
743 765
744 // Attempt to read/write after shutdown 766 // Attempt to read/write after shutdown
745 char buffer[10]; 767 char buffer[10];
(...skipping 11 matching lines...) Expand all
757 int client_sock = sock2_; 779 int client_sock = sock2_;
758 780
759 // bind and listen 781 // bind and listen
760 ASSERT_EQ(0, Bind(server_sock, LOCAL_HOST, PORT1)); 782 ASSERT_EQ(0, Bind(server_sock, LOCAL_HOST, PORT1));
761 ASSERT_EQ(0, ki_listen(server_sock, 10)) 783 ASSERT_EQ(0, ki_listen(server_sock, 10))
762 << "listen failed with: " << strerror(errno); 784 << "listen failed with: " << strerror(errno);
763 785
764 // connect to listening socket 786 // connect to listening socket
765 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr); 787 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr);
766 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen)) 788 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen))
767 << "Failed with " << errno << ": " << strerror(errno) << "\n"; 789 << "Failed with " << errno << ": " << strerror(errno);
768 790
769 addrlen = sizeof(addr); 791 addrlen = sizeof(addr);
770 int new_sock = accept(server_sock, (sockaddr*)&addr, &addrlen); 792 int new_sock = accept(server_sock, (sockaddr*)&addr, &addrlen);
771 ASSERT_NE(-1, new_sock); 793 ASSERT_NE(-1, new_sock);
772 794
773 // send a fairly large amount of data and immediately close 795 // send a fairly large amount of data and immediately close
774 // the socket. 796 // the socket.
775 void* buffer = alloca(SEND_BYTES); 797 void* buffer = alloca(SEND_BYTES);
776 ASSERT_EQ(SEND_BYTES, ki_send(client_sock, buffer, SEND_BYTES, 0)); 798 ASSERT_EQ(SEND_BYTES, ki_send(client_sock, buffer, SEND_BYTES, 0));
777 ASSERT_EQ(0, ki_close(client_sock)); 799 ASSERT_EQ(0, ki_close(client_sock));
778 800
779 // avoid double close of sock2_ 801 // avoid double close of sock2_
780 sock2_ = -1; 802 sock2_ = -1;
781 803
782 // Attempt to recv() all the sent data. None should be lost. 804 // Attempt to recv() all the sent data. None should be lost.
783 int remainder = SEND_BYTES; 805 int remainder = SEND_BYTES;
784 while (remainder > 0) { 806 while (remainder > 0) {
785 int rtn = ki_recv(new_sock, buffer, remainder, 0); 807 int rtn = ki_recv(new_sock, buffer, remainder, 0);
786 ASSERT_GT(rtn, 0); 808 ASSERT_GT(rtn, 0);
787 remainder -= rtn; 809 remainder -= rtn;
788 } 810 }
789 811
790 ASSERT_EQ(0, ki_close(new_sock)); 812 ASSERT_EQ(0, ki_close(new_sock));
791 } 813 }
792 814
793 #endif // PROVIDES_SOCKET_API 815 #endif // PROVIDES_SOCKET_API
OLDNEW
« no previous file with comments | « native_client_sdk/src/libraries/nacl_io/ossocket.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698