TEST_F(StreamSocketTest, StreamSocketReceiveLineInString) { StreamSocket stream; EXPECT_TRUE(stream.Create(AF_INET)); EXPECT_FALSE(stream.Connect(SocketAddressInet("0.0.0.0:0"))); EXPECT_TRUE(stream.Connect(m_address)) << m_address.ToString(); struct timeval tv; tv.tv_sec = 5; tv.tv_usec = 0; EXPECT_TRUE(stream.WaitWriteable(&tv, true)); std::string sent = "12345\n"; EXPECT_TRUE(stream.SendAll(sent.data(), sent.size())); tv.tv_sec = 5; tv.tv_usec = 0; EXPECT_TRUE(stream.WaitReadable(&tv, true)); std::string received; EXPECT_TRUE(stream.ReceiveLine(&received)); EXPECT_EQ(sent, received); // Send all with timeout tv.tv_sec = 5; tv.tv_usec = 0; size_t sent_size; EXPECT_TRUE(stream.SendAll(sent.data(), sent.size(), &sent_size, &tv)); EXPECT_EQ(sent.size(), sent_size); // peek size with 2 EXPECT_TRUE(stream.ReceiveLine(&received, 2)); EXPECT_EQ(sent, received); }
TEST_F(StreamSocketTest, StreamSocketReceiveLineInSmallerSizeBuffer) { StreamSocket stream; EXPECT_TRUE(stream.Create(AF_INET)); EXPECT_FALSE(stream.Connect(SocketAddressInet("0.0.0.0:0"))); EXPECT_TRUE(stream.Connect(m_address)) << m_address.ToString(); std::string sent = "12345\n"; char buffer[5]; size_t buffer_size = 5; size_t received_size; EXPECT_TRUE(stream.SendAll(sent.data(), sent.size())); EXPECT_FALSE(stream.ReceiveLine(buffer, buffer_size, &received_size)); EXPECT_EQ(5U, received_size); for (size_t i = 0; i < received_size; ++i) { EXPECT_EQ(sent[i], buffer[i]); } // receive until '\n' EXPECT_TRUE(stream.ReceiveLine(buffer, buffer_size, &received_size)); EXPECT_EQ(1U, received_size); EXPECT_EQ('\n', buffer[0]); }
TEST_F(StreamSocketTest, ConnectWithTimeout) { StreamSocket stream; EXPECT_TRUE(stream.Create(AF_INET)); EXPECT_FALSE(stream.Connect(SocketAddressInet("0.0.0.0:0"), 10)); bool blocking = true; // For unknown reason, if we reuse failed socket, the following Connect // will faile with ECONNRESET, create a new socket here. EXPECT_TRUE(stream.Create(AF_INET)); EXPECT_TRUE(stream.GetBlocking(&blocking)); EXPECT_TRUE(blocking); EXPECT_TRUE(stream.Connect(m_address, 10)); EXPECT_TRUE(stream.GetBlocking(&blocking)); EXPECT_TRUE(blocking); EXPECT_TRUE(stream.SendAll("\n", 1)); }
bool TcpClient::Connect(const char * host, int port) { return Connect(SocketAddressInet(host, port)); }