|
|
|
@ -384,7 +384,28 @@ static void test_concurrent_operations(void) { |
|
|
|
/* Create socket pair for testing */ |
|
|
|
/* Create socket pair for testing */ |
|
|
|
int sockets[2]; |
|
|
|
int sockets[2]; |
|
|
|
void* socket_ids[2]; |
|
|
|
void* socket_ids[2]; |
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
|
|
|
|
// Windows doesn't have socketpair, use UDP sockets instead
|
|
|
|
|
|
|
|
sockets[0] = socket(AF_INET, SOCK_DGRAM, 0); |
|
|
|
|
|
|
|
sockets[1] = socket(AF_INET, SOCK_DGRAM, 0); |
|
|
|
|
|
|
|
ASSERT_TRUE(sockets[0] >= 0 && sockets[1] >= 0, "Failed to create sockets"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct sockaddr_in addr1, addr2; |
|
|
|
|
|
|
|
memset(&addr1, 0, sizeof(addr1)); |
|
|
|
|
|
|
|
addr1.sin_family = AF_INET; |
|
|
|
|
|
|
|
addr1.sin_addr.s_addr = inet_addr("127.0.0.1"); |
|
|
|
|
|
|
|
addr1.sin_port = htons(0); // Let system choose port
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
memset(&addr2, 0, sizeof(addr2)); |
|
|
|
|
|
|
|
addr2.sin_family = AF_INET; |
|
|
|
|
|
|
|
addr2.sin_addr.s_addr = inet_addr("127.0.0.1"); |
|
|
|
|
|
|
|
addr2.sin_port = htons(0); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ASSERT_EQ(bind(sockets[0], (struct sockaddr*)&addr1, sizeof(addr1)), 0, "Failed to bind socket 0"); |
|
|
|
|
|
|
|
ASSERT_EQ(bind(sockets[1], (struct sockaddr*)&addr2, sizeof(addr2)), 0, "Failed to bind socket 1"); |
|
|
|
|
|
|
|
#else |
|
|
|
ASSERT_EQ(socketpair(AF_UNIX, SOCK_DGRAM, 0, sockets), 0, "Failed to create socket pair"); |
|
|
|
ASSERT_EQ(socketpair(AF_UNIX, SOCK_DGRAM, 0, sockets), 0, "Failed to create socket pair"); |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
/* Make non-blocking */ |
|
|
|
/* Make non-blocking */ |
|
|
|
for (int i = 0; i < 2; i++) { |
|
|
|
for (int i = 0; i < 2; i++) { |
|
|
|
|