Go to the documentation of this file.
21 #include "absl/strings/match.h"
22 #include "absl/strings/str_cat.h"
31 #define BAD_SOCKET_RETURN_VAL INVALID_SOCKET
32 #define CLOSE_SOCKET closesocket
33 #define ERRNO WSAGetLastError()
38 #define BAD_SOCKET_RETURN_VAL (-1)
39 #define CLOSE_SOCKET close
48 bool ErrorIsRetryable(
int error) {
50 return error == WSAEWOULDBLOCK ||
error == WSAEINPROGRESS;
52 return error == EWOULDBLOCK ||
error == EAGAIN;
62 : accept_mode_(accept_mode), process_read_cb_(
std::
move(process_read_cb)) {
77 if (setsockopt(
accept_socket_, SOL_SOCKET, SO_REUSEADDR, &val,
sizeof(val)) ==
80 "Failed to set SO_REUSEADDR on TCP ipv6 socket to [::1]:%d, "
86 set_non_block_error = grpc_tcp_set_non_block(
udp_socket_);
100 if (setsockopt(
accept_socket_, SOL_SOCKET, SO_REUSEADDR, &val,
sizeof(val)) !=
105 if (fcntl(
udp_socket_, F_SETFL, O_NONBLOCK) != 0) {
118 (
reinterpret_cast<char*
>(&
addr.sin6_addr))[15] = 1;
121 resolved_addr.
len =
sizeof(
addr);
126 sizeof(
addr)) != 0) {
131 sizeof(
addr)) != 0) {
148 "FakeUdpAndTcpServer stop and "
149 "join server thread");
153 "FakeUdpAndTcpServer join server "
161 int bytes_received_size,
int read_error,
int s) {
162 if (bytes_received_size < 0 && !ErrorIsRetryable(read_error)) {
167 if (bytes_received_size >= 0) {
169 "Fake TCP server received %d bytes from peer socket: %d. Close "
172 bytes_received_size, s);
180 int read_error,
int s) {
181 if (bytes_received_size < 0 && !ErrorIsRetryable(read_error)) {
186 if (bytes_received_size == 0) {
189 "Fake TCP server received 0 bytes from peer socket: %d. Close "
208 const std::vector<char> kEmptyHttp2SettingsFrame = {
212 0x00, 0x00, 0x00, 0x00
214 if (total_bytes_sent_ <
int(kEmptyHttp2SettingsFrame.size())) {
215 int bytes_to_send = kEmptyHttp2SettingsFrame.size() - total_bytes_sent_;
217 send(fd_, kEmptyHttp2SettingsFrame.data() + total_bytes_sent_,
221 "Fake TCP server encountered unexpected error:%d "
222 "sending %d bytes on fd:%d",
223 ERRNO, bytes_to_send, fd_);
227 GPR_ASSERT(total_bytes_sent_ <=
int(kEmptyHttp2SettingsFrame.size()));
238 std::set<std::unique_ptr<FakeUdpAndTcpServerPeer>> peers;
246 set_non_block_error = grpc_tcp_set_non_block(p);
253 if (fcntl(p, F_SETFL, O_NONBLOCK) != 0) {
259 peers.insert(absl::make_unique<FakeUdpAndTcpServerPeer>(p));
261 auto it = peers.begin();
262 while (
it != peers.end()) {
268 int bytes_received_size = recv(peer->
fd(),
buf, 100, 0);
272 it = peers.erase(
it);
GPRAPI void * gpr_event_get(gpr_event *ev)
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
void MaybeContinueSendingSettings()
#define BAD_SOCKET_RETURN_VAL
return memset(p, 0, total)
static ProcessReadResult CloseSocketUponReceivingBytesFromPeer(int bytes_received_size, int read_error, int s)
std::function< ProcessReadResult(int, int, int)> process_read_cb_
GPRAPI void gpr_event_set(gpr_event *ev, void *value)
absl::StatusOr< std::string > grpc_sockaddr_to_string(const grpc_resolved_address *resolved_addr, bool normalize)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
const AcceptMode accept_mode_
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
def c_str(s, encoding='ascii')
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
~FakeUdpAndTcpServerPeer()
GPRAPI void gpr_sleep_until(gpr_timespec until)
std::unique_ptr< std::thread > run_server_loop_thd_
GPRAPI void gpr_event_init(gpr_event *ev)
FakeUdpAndTcpServerPeer(int fd)
int grpc_pick_unused_port_or_die(void)
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock)
GPRAPI gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b)
std::string grpc_error_std_string(grpc_error_handle error)
def listen(endpoint, test_case)
FakeUdpAndTcpServer(AcceptMode accept_mode, std::function< ProcessReadResult(int, int, int)> process_read_cb)
GPRAPI gpr_timespec gpr_time_from_millis(int64_t ms, gpr_clock_type clock_type)
static ProcessReadResult CloseSocketUponCloseFromPeer(int bytes_received_size, int read_error, int s)
const T & value() const &ABSL_ATTRIBUTE_LIFETIME_BOUND
char addr[GRPC_MAX_SOCKADDR_SIZE]
#define GRPC_ERROR_IS_NONE(err)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:22