OLD | NEW |
---|---|
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 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
610 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr); | 610 IP4ToSockAddr(LOCAL_HOST, PORT1, &addr); |
611 addrlen = sizeof(addr); | 611 addrlen = sizeof(addr); |
612 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen)) | 612 ASSERT_EQ(0, ki_connect(client_sock, (sockaddr*)&addr, addrlen)) |
613 << "Failed with " << errno << ": " << strerror(errno); | 613 << "Failed with " << errno << ": " << strerror(errno); |
614 | 614 |
615 ASSERT_EQ(greeting_len, ki_send(client_sock, client_greeting, | 615 ASSERT_EQ(greeting_len, ki_send(client_sock, client_greeting, |
616 greeting_len, 0)); | 616 greeting_len, 0)); |
617 | 617 |
618 // 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 |
619 // sure that it is correctly set back to sizeof(sockaddr_in) | 619 // sure that it is correctly set back to sizeof(sockaddr_in) |
620 addrlen = sizeof(addr) + 10; | 620 sockaddr_in client_addr[2]; |
621 int new_socket = ki_accept(server_sock, (sockaddr*)&addr, &addrlen); | 621 sockaddr_in cmp_addr; |
622 memset(&client_addr[0], 0, sizeof(client_addr[0])); | |
623 memset(&client_addr[1], 0xab, sizeof(client_addr[1])); | |
624 memset(&cmp_addr, 0xab, sizeof(cmp_addr)); | |
625 addrlen = sizeof(client_addr[0]) + 10; | |
626 int new_socket = ki_accept(server_sock, (sockaddr*)&client_addr[0], | |
627 &addrlen); | |
622 ASSERT_GT(new_socket, -1) | 628 ASSERT_GT(new_socket, -1) |
623 << "accept failed with " << errno << ": " << strerror(errno); | 629 << "accept failed with " << errno << ": " << strerror(errno); |
630 ASSERT_EQ(addrlen, sizeof(sockaddr_in)); | |
631 // Check that client_addr[1] and cmp_addr are the same (not overwritten). | |
632 ASSERT_EQ(0, memcmp(&client_addr[1], &cmp_addr, sizeof(cmp_addr))); | |
633 ASSERT_EQ(0xabab, client_addr[1].sin_port); | |
624 | 634 |
625 // Verify addr and addrlen were set correctly | 635 // Verify addr and addrlen were set correctly |
626 ASSERT_EQ(addrlen, sizeof(sockaddr_in)); | 636 ASSERT_EQ(addrlen, sizeof(sockaddr_in)); |
627 sockaddr_in client_addr; | 637 ASSERT_EQ(0, ki_getsockname(client_sock, (sockaddr*)&client_addr[1], |
628 ASSERT_EQ(0, ki_getsockname(client_sock, (sockaddr*)&client_addr, &addrlen)); | 638 &addrlen)); |
629 ASSERT_EQ(client_addr.sin_family, addr.sin_family); | 639 ASSERT_EQ(client_addr[1].sin_family, client_addr[0].sin_family); |
630 ASSERT_EQ(client_addr.sin_port, addr.sin_port); | 640 ASSERT_EQ(client_addr[1].sin_port, client_addr[0].sin_port); |
631 ASSERT_EQ(client_addr.sin_addr.s_addr, addr.sin_addr.s_addr); | 641 ASSERT_EQ(client_addr[1].sin_addr.s_addr, client_addr[0].sin_addr.s_addr); |
642 | |
643 // Try a call where the supplied len is smaller than the expected length. | |
644 // The API should only write up to that amount, but should return the | |
645 // expected length. | |
646 sockaddr_in client_addr2; | |
647 memset(&client_addr2, 0, sizeof(client_addr2)); | |
648 socklen_t truncated_len = sizeof(client_addr2.sin_family); | |
649 ASSERT_GT(sizeof(sockaddr_in), truncated_len); | |
650 ASSERT_EQ(0, ki_getsockname(client_sock, (sockaddr*)&client_addr2, | |
651 &truncated_len)); | |
652 ASSERT_EQ(sizeof(sockaddr_in), truncated_len); | |
653 ASSERT_EQ(client_addr2.sin_family, client_addr[0].sin_family); | |
654 ASSERT_EQ(client_addr2.sin_port, 0); | |
655 ASSERT_EQ(client_addr2.sin_addr.s_addr, 0); | |
Sam Clegg
2014/06/04 00:45:28
This seems like it should be its own test really..
| |
632 | 656 |
633 // Recv greeting from client and send reply | 657 // Recv greeting from client and send reply |
634 char inbuf[512]; | 658 char inbuf[512]; |
635 ASSERT_EQ(greeting_len, ki_recv(new_socket, inbuf, sizeof(inbuf), 0)); | 659 ASSERT_EQ(greeting_len, ki_recv(new_socket, inbuf, sizeof(inbuf), 0)); |
636 inbuf[greeting_len] = 0; | 660 inbuf[greeting_len] = 0; |
637 ASSERT_STREQ(inbuf, client_greeting); | 661 ASSERT_STREQ(inbuf, client_greeting); |
638 ASSERT_EQ(reply_len, ki_send(new_socket, server_reply, reply_len, 0)); | 662 ASSERT_EQ(reply_len, ki_send(new_socket, server_reply, reply_len, 0)); |
639 | 663 |
640 // Recv reply on client socket | 664 // Recv reply on client socket |
641 ASSERT_EQ(reply_len, ki_recv(client_sock, inbuf, sizeof(inbuf), 0)); | 665 ASSERT_EQ(reply_len, ki_recv(client_sock, inbuf, sizeof(inbuf), 0)); |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
806 while (remainder > 0) { | 830 while (remainder > 0) { |
807 int rtn = ki_recv(new_sock, buffer, remainder, 0); | 831 int rtn = ki_recv(new_sock, buffer, remainder, 0); |
808 ASSERT_GT(rtn, 0); | 832 ASSERT_GT(rtn, 0); |
809 remainder -= rtn; | 833 remainder -= rtn; |
810 } | 834 } |
811 | 835 |
812 ASSERT_EQ(0, ki_close(new_sock)); | 836 ASSERT_EQ(0, ki_close(new_sock)); |
813 } | 837 } |
814 | 838 |
815 #endif // PROVIDES_SOCKET_API | 839 #endif // PROVIDES_SOCKET_API |
OLD | NEW |