| 601 | } |
| 602 | |
| 603 | void TestConnectInterruptImpl(bool timed) { |
| 604 | butil::EndPoint ep; |
| 605 | ASSERT_EQ(0, butil::hostname2endpoint(g_hostname1, 80, &ep)); |
| 606 | struct sockaddr_storage serv_addr{}; |
| 607 | socklen_t serv_addr_size = 0; |
| 608 | ASSERT_EQ(0, endpoint2sockaddr(ep, &serv_addr, &serv_addr_size)); |
| 609 | butil::fd_guard sockfd(socket(serv_addr.ss_family, SOCK_STREAM, 0)); |
| 610 | ASSERT_GE(sockfd, 0); |
| 611 | |
| 612 | int rc; |
| 613 | if (timed) { |
| 614 | int64_t start_ms = butil::cpuwide_time_ms(); |
| 615 | butil::tcp_connect(ep, NULL); |
| 616 | int64_t connect_ms = butil::cpuwide_time_ms() - start_ms; |
| 617 | LOG(INFO) << "Connect to " << ep << ", cost " << connect_ms << "ms"; |
| 618 | |
| 619 | timespec abstime = butil::milliseconds_from_now(connect_ms * 10); |
| 620 | rc = bthread_timed_connect( |
| 621 | sockfd, (struct sockaddr*) &serv_addr, |
| 622 | serv_addr_size, &abstime); |
| 623 | } else { |
| 624 | rc = bthread_timed_connect( |
| 625 | sockfd, (struct sockaddr*) &serv_addr, |
| 626 | serv_addr_size, NULL); |
| 627 | } |
| 628 | ASSERT_EQ(0, rc) << "errno=" << errno; |
| 629 | ASSERT_EQ(0, butil::is_connected(sockfd)); |
| 630 | |
| 631 | } |
| 632 | |
| 633 | void* ConnectThread(void* arg) { |
| 634 | bool timed = *(bool*)arg; |
no test coverage detected