Coverage Report

Created: 2026-01-10 06:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/h2o/include/h2o/socket.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2014-2016 DeNA Co., Ltd., Kazuho Oku, Fastly, Inc.
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining a copy
5
 * of this software and associated documentation files (the "Software"), to
6
 * deal in the Software without restriction, including without limitation the
7
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8
 * sell copies of the Software, and to permit persons to whom the Software is
9
 * furnished to do so, subject to the following conditions:
10
 *
11
 * The above copyright notice and this permission notice shall be included in
12
 * all copies or substantial portions of the Software.
13
 *
14
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20
 * IN THE SOFTWARE.
21
 */
22
#ifndef h2o__socket_h
23
#define h2o__socket_h
24
25
#ifdef __cplusplus
26
extern "C" {
27
#endif
28
29
#include <stdint.h>
30
#include <sys/socket.h>
31
#include <time.h>
32
#ifdef __linux__
33
#include <linux/errqueue.h>
34
#endif
35
#include <openssl/ssl.h>
36
#include <openssl/opensslconf.h>
37
#include "picotls.h"
38
#include "picotls/openssl.h" /* for H2O_CAN_OSSL_ASYNC */
39
#include "h2o/cache.h"
40
#include "h2o/memory.h"
41
#include "h2o/openssl_backport.h"
42
#include "h2o/string_.h"
43
44
#ifndef H2O_USE_LIBUV
45
#if H2O_USE_POLL || H2O_USE_EPOLL || H2O_USE_KQUEUE
46
#define H2O_USE_LIBUV 0
47
#else
48
#define H2O_USE_LIBUV 1
49
#endif
50
#endif
51
52
#if defined(SO_ZEROCOPY) && defined(SO_EE_ORIGIN_ZEROCOPY) && defined(MSG_ZEROCOPY)
53
#define H2O_USE_MSG_ZEROCOPY 1
54
#endif
55
56
#if OPENSSL_VERSION_NUMBER >= 0x10002000L
57
#define H2O_USE_ALPN 1
58
#ifndef OPENSSL_NO_NEXTPROTONEG
59
#define H2O_USE_NPN 1
60
#else
61
#define H2O_USE_NPN 0
62
#endif
63
#elif OPENSSL_VERSION_NUMBER >= 0x10001000L
64
#define H2O_USE_ALPN 0
65
#define H2O_USE_NPN 1
66
#else
67
#define H2O_USE_ALPN 0
68
#define H2O_USE_NPN 0
69
#endif
70
71
#if !defined(LIBRESSL_VERSION_NUMBER) && !defined(OPENSSL_IS_BORINGSSL) && OPENSSL_VERSION_NUMBER >= 0x1010100fL
72
#define H2O_USE_OPENSSL_CLIENT_HELLO_CB 1
73
#endif
74
#if PTLS_OPENSSL_HAVE_ASYNC && H2O_USE_OPENSSL_CLIENT_HELLO_CB
75
#define H2O_CAN_OSSL_ASYNC 1
76
#endif
77
78
/**
79
 * Maximum size of sendvec when a pull (i.e. non-raw) vector is used. Note also that bufcnt must be set to one when a pull mode
80
 * vector is used.
81
 */
82
0
#define H2O_PULL_SENDVEC_MAX_SIZE 65536
83
/**
84
 * Maximum amount of TLS records to generate at once. Default is 4 full-sized TLS records using 32-byte tag. This value is defined
85
 * to be slightly greater than H2O_PULL_SENDVEC_MAX_SIZE, so that the two buffers can recycle the same memory buffers.
86
 */
87
#define H2O_SOCKET_DEFAULT_SSL_BUFFER_SIZE ((5 + 16384 + 32) * 4)
88
89
typedef struct st_h2o_sliding_counter_t {
90
    uint64_t average;
91
    struct {
92
        uint64_t sum;
93
        uint64_t slots[8];
94
        size_t index;
95
    } prev;
96
    struct {
97
        uint64_t start_at;
98
    } cur;
99
} h2o_sliding_counter_t;
100
101
static int h2o_sliding_counter_is_running(h2o_sliding_counter_t *counter);
102
static void h2o_sliding_counter_start(h2o_sliding_counter_t *counter, uint64_t now);
103
void h2o_sliding_counter_stop(h2o_sliding_counter_t *counter, uint64_t now);
104
105
#define H2O_SOCKET_INITIAL_INPUT_BUFFER_SIZE 4096
106
107
0
#define H2O_SESSID_CTX ((const uint8_t *)"h2o")
108
0
#define H2O_SESSID_CTX_LEN (sizeof("h2o") - 1)
109
110
typedef struct st_h2o_socket_t h2o_socket_t;
111
112
typedef void (*h2o_socket_cb)(h2o_socket_t *sock, const char *err);
113
114
/* used by probes */
115
struct st_h2o_io_uring_cmd_t;
116
117
#if H2O_USE_LIBUV
118
#include "socket/uv-binding.h"
119
#else
120
#include "socket/evloop.h"
121
#endif
122
123
struct st_h2o_socket_addr_t {
124
    socklen_t len;
125
    struct sockaddr addr;
126
};
127
128
enum {
129
    H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_TBD = 0,
130
    H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_NEEDS_UPDATE,
131
    H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_DISABLED,
132
    H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_DETERMINED
133
};
134
135
typedef struct st_h2o_sendvec_t h2o_sendvec_t;
136
137
/**
138
 * Callbacks of `h2o_sendvec_t`. Random access capability has been removed. `read_` and `send_` only provide one-pass sequential
139
 * access. Properties of `h2o_sendvec_t` (e.g., `len`, `raw`) are adjusted as bytes are read / sent from the vector.
140
 */
141
typedef struct st_h2o_sendvec_callbacks_t {
142
    /**
143
     * Mandatory callback used to load the bytes held by the vector. Returns if the operation succeeded. When false is returned, the
144
     * generator is considered as been error-closed by itself.  If the callback is `h2o_sendvec_read_raw`, the data is available as
145
     * raw bytes in `h2o_sendvec_t::raw`.
146
     */
147
    int (*read_)(h2o_sendvec_t *vec, void *dst, size_t len);
148
    /**
149
     * Optional callback for sending contents of a vector directly to a socket. Returns number of bytes being sent (could be zero),
150
     * or, upon error, SIZE_MAX.
151
     */
152
    size_t (*send_)(h2o_sendvec_t *vec, int sockfd, size_t len);
153
} h2o_sendvec_callbacks_t;
154
155
/**
156
 * send vector. Unlike an ordinary `h2o_iovec_t`, the vector has a callback that allows the sender to delay the flattening of data
157
 * until it becomes necessary.
158
 */
159
struct st_h2o_sendvec_t {
160
    /**
161
     *
162
     */
163
    const h2o_sendvec_callbacks_t *callbacks;
164
    /**
165
     * size of the vector
166
     */
167
    size_t len;
168
    /**
169
     *
170
     */
171
    union {
172
        char *raw;
173
        uint64_t cb_arg[2];
174
    };
175
};
176
177
/**
178
 * abstraction layer for sockets (SSL vs. TCP)
179
 */
180
struct st_h2o_socket_t {
181
    void *data;
182
    struct st_h2o_socket_ssl_t *ssl;
183
    h2o_buffer_t *input;
184
    /**
185
     * total bytes read (above the TLS layer)
186
     */
187
    uint64_t bytes_read;
188
    /**
189
     * total bytes written (above the TLS layer)
190
     */
191
    uint64_t bytes_written;
192
    /**
193
     * trace state; when picotls is used as the TLS stack, this state is duplicated to that of picotls to achieve consistent
194
     * behavior across layers
195
     */
196
    ptls_log_conn_state_t _log_state;
197
    struct {
198
        void (*cb)(void *data);
199
        void *data;
200
    } on_close;
201
    struct {
202
        h2o_socket_cb read;
203
        h2o_socket_cb write;
204
    } _cb;
205
    struct st_h2o_socket_addr_t *_peername;
206
    struct st_h2o_socket_addr_t *_sockname;
207
    struct {
208
        size_t cnt;
209
        h2o_iovec_t *bufs;
210
        union {
211
            h2o_iovec_t *alloced_ptr;
212
            h2o_iovec_t smallbufs[4];
213
        };
214
        char *flattened;
215
    } _write_buf;
216
    struct {
217
        uint8_t state; /* one of H2O_SOCKET_LATENCY_STATE_* */
218
        uint8_t notsent_is_minimized : 1;
219
        size_t suggested_tls_payload_size; /* suggested TLS record payload size, or SIZE_MAX when no need to restrict */
220
        size_t suggested_write_size;       /* SIZE_MAX if no need to optimize for latency */
221
    } _latency_optimization;
222
    struct st_h2o_socket_zerocopy_buffers_t *_zerocopy;
223
};
224
225
typedef struct st_h2o_socket_export_t {
226
    int fd;
227
    struct st_h2o_socket_ssl_t *ssl;
228
    h2o_buffer_t *input;
229
} h2o_socket_export_t;
230
231
/**
232
 * sets the conditions to enable the optimization
233
 */
234
typedef struct st_h2o_socket_latency_optimization_conditions_t {
235
    /**
236
     * in milliseconds
237
     */
238
    unsigned min_rtt;
239
    /**
240
     * percent ratio
241
     */
242
    unsigned max_additional_delay;
243
    /**
244
     * in number of octets
245
     */
246
    unsigned max_cwnd;
247
} h2o_socket_latency_optimization_conditions_t;
248
249
typedef void (*h2o_socket_ssl_resumption_get_async_cb)(h2o_socket_t *sock, h2o_iovec_t session_id);
250
typedef void (*h2o_socket_ssl_resumption_new_cb)(h2o_socket_t *sock, h2o_iovec_t session_id, h2o_iovec_t session_data);
251
typedef void (*h2o_socket_ssl_resumption_remove_cb)(h2o_iovec_t session_id);
252
253
extern h2o_buffer_mmap_settings_t h2o_socket_buffer_mmap_settings;
254
extern h2o_buffer_prototype_t h2o_socket_buffer_prototype;
255
256
/**
257
 * see H2O_SOCKET_DEFAULT_SSL_BUFFER_SIZE
258
 */
259
extern h2o_mem_recycle_conf_t h2o_socket_ssl_buffer_conf;
260
extern __thread h2o_mem_recycle_t h2o_socket_ssl_buffer_allocator;
261
extern __thread h2o_mem_recycle_t h2o_socket_zerocopy_buffer_allocator;
262
extern __thread size_t h2o_socket_num_zerocopy_buffers_inflight;
263
264
/**
265
 * boolean flag indicating if kTLS should be used (when preferable)
266
 */
267
extern int h2o_socket_use_ktls;
268
269
extern const char h2o_socket_error_out_of_memory[];
270
extern const char h2o_socket_error_io[];
271
extern const char h2o_socket_error_closed[];
272
extern const char h2o_socket_error_conn_fail[];
273
extern const char h2o_socket_error_conn_refused[];
274
extern const char h2o_socket_error_conn_timed_out[];
275
extern const char h2o_socket_error_network_unreachable[];
276
extern const char h2o_socket_error_host_unreachable[];
277
extern const char h2o_socket_error_socket_fail[];
278
extern const char h2o_socket_error_ssl_no_cert[];
279
extern const char h2o_socket_error_ssl_cert_invalid[];
280
extern const char h2o_socket_error_ssl_cert_name_mismatch[];
281
extern const char h2o_socket_error_ssl_decode[];
282
extern const char h2o_socket_error_ssl_handshake[];
283
284
/**
285
 * returns the loop
286
 */
287
h2o_loop_t *h2o_socket_get_loop(h2o_socket_t *sock);
288
/**
289
 * detaches a socket from loop.
290
 */
291
int h2o_socket_export(h2o_socket_t *sock, h2o_socket_export_t *info);
292
/**
293
 * attaches a socket onto a loop.
294
 */
295
h2o_socket_t *h2o_socket_import(h2o_loop_t *loop, h2o_socket_export_t *info);
296
/**
297
 * destroys an exported socket info.
298
 */
299
void h2o_socket_dispose_export(h2o_socket_export_t *info);
300
/**
301
 * closes the socket
302
 */
303
void h2o_socket_close(h2o_socket_t *sock);
304
/**
305
 * Schedules a callback that would be invoked when the socket becomes immediately writable
306
 */
307
void h2o_socket_notify_write(h2o_socket_t *sock, h2o_socket_cb cb);
308
/**
309
 * Obtain the underlying fd of a sock struct
310
 */
311
int h2o_socket_get_fd(h2o_socket_t *sock);
312
/**
313
 * Set/Unset the H2O_SOCKET_FLAG_DONT_READ flag.
314
 * Setting it allows to be simply notified rather than having the data
315
 * automatically be read.
316
 */
317
void h2o_socket_dont_read(h2o_socket_t *sock, int dont_read);
318
/**
319
 * connects to peer
320
 */
321
h2o_socket_t *h2o_socket_connect(h2o_loop_t *loop, struct sockaddr *addr, socklen_t addrlen, h2o_socket_cb cb, const char **err);
322
/**
323
 * prepares for latency-optimized write and returns the number of octets that should be written, or SIZE_MAX if failed to prepare
324
 */
325
static size_t h2o_socket_prepare_for_latency_optimized_write(h2o_socket_t *sock,
326
                                                             const h2o_socket_latency_optimization_conditions_t *conditions);
327
size_t h2o_socket_do_prepare_for_latency_optimized_write(h2o_socket_t *sock,
328
                                                         const h2o_socket_latency_optimization_conditions_t *conditions);
329
/**
330
 * writes given data to socket
331
 * @param sock the socket
332
 * @param bufs an array of buffers
333
 * @param bufcnt length of the buffer array
334
 * @param cb callback to be called when write is complete
335
 */
336
void h2o_socket_write(h2o_socket_t *sock, h2o_iovec_t *bufs, size_t bufcnt, h2o_socket_cb cb);
337
/**
338
 *
339
 */
340
void h2o_socket_sendvec(h2o_socket_t *sock, h2o_sendvec_t *bufs, size_t bufcnt, h2o_socket_cb cb);
341
/**
342
 * starts polling on the socket (for read) and calls given callback when data arrives
343
 * @param sock the socket
344
 * @param cb callback to be called when data arrives
345
 * @note callback is called when any data arrives at the TCP level so that the
346
 * applications can update their timeout counters.  In other words, there is no
347
 * guarantee that _new_ data is available when the callback gets called (e.g.
348
 * in cases like receiving a partial SSL record or a corrupt TCP packet).
349
 */
350
void h2o_socket_read_start(h2o_socket_t *sock, h2o_socket_cb cb);
351
/**
352
 * stops polling on the socket (for read)
353
 * @param sock the socket
354
 */
355
void h2o_socket_read_stop(h2o_socket_t *sock);
356
/**
357
 * returns a boolean value indicating whether if there is a write is under operation
358
 */
359
static int h2o_socket_is_writing(h2o_socket_t *sock);
360
/**
361
 * returns a boolean value indicating whether if the socket is being polled for read
362
 */
363
static int h2o_socket_is_reading(h2o_socket_t *sock);
364
/**
365
 * returns the length of the local address obtained (or 0 if failed)
366
 */
367
socklen_t h2o_socket_getsockname(h2o_socket_t *sock, struct sockaddr *sa);
368
/**
369
 * returns the length of the remote address obtained (or 0 if failed)
370
 */
371
socklen_t h2o_socket_getpeername(h2o_socket_t *sock, struct sockaddr *sa);
372
/**
373
 * sets the remote address (used for overriding the value)
374
 */
375
void h2o_socket_setpeername(h2o_socket_t *sock, struct sockaddr *sa, socklen_t len);
376
/**
377
 *
378
 */
379
ptls_t *h2o_socket_get_ptls(h2o_socket_t *sock);
380
/**
381
 *
382
 */
383
int h2o_socket_can_tls_offload(h2o_socket_t *sock);
384
/**
385
 *
386
 */
387
h2o_iovec_t h2o_socket_log_tcp_congestion_controller(h2o_socket_t *sock, h2o_mem_pool_t *pool);
388
h2o_iovec_t h2o_socket_log_tcp_delivery_rate(h2o_socket_t *sock, h2o_mem_pool_t *pool);
389
const char *h2o_socket_get_ssl_protocol_version(h2o_socket_t *sock);
390
int h2o_socket_get_ssl_session_reused(h2o_socket_t *sock);
391
const char *h2o_socket_get_ssl_cipher(h2o_socket_t *sock);
392
int h2o_socket_get_ssl_cipher_bits(h2o_socket_t *sock);
393
h2o_iovec_t h2o_socket_get_ssl_session_id(h2o_socket_t *sock);
394
const char *h2o_socket_get_ssl_server_name(const h2o_socket_t *sock);
395
static h2o_iovec_t h2o_socket_log_ssl_protocol_version(h2o_socket_t *sock, h2o_mem_pool_t *pool);
396
static h2o_iovec_t h2o_socket_log_ssl_session_reused(h2o_socket_t *sock, h2o_mem_pool_t *pool);
397
static h2o_iovec_t h2o_socket_log_ssl_cipher(h2o_socket_t *sock, h2o_mem_pool_t *pool);
398
h2o_iovec_t h2o_socket_log_ssl_cipher_bits(h2o_socket_t *sock, h2o_mem_pool_t *pool);
399
h2o_iovec_t h2o_socket_log_ssl_session_id(h2o_socket_t *sock, h2o_mem_pool_t *pool);
400
static h2o_iovec_t h2o_socket_log_ssl_server_name(h2o_socket_t *sock, h2o_mem_pool_t *pool);
401
static h2o_iovec_t h2o_socket_log_ssl_negotiated_protocol(h2o_socket_t *sock, h2o_mem_pool_t *pool);
402
h2o_iovec_t h2o_socket_log_ssl_ech_config_id(h2o_socket_t *sock, h2o_mem_pool_t *pool);
403
h2o_iovec_t h2o_socket_log_ssl_ech_kem(h2o_socket_t *sock, h2o_mem_pool_t *pool);
404
h2o_iovec_t h2o_socket_log_ssl_ech_cipher(h2o_socket_t *sock, h2o_mem_pool_t *pool);
405
h2o_iovec_t h2o_socket_log_ssl_ech_cipher_bits(h2o_socket_t *sock, h2o_mem_pool_t *pool);
406
h2o_iovec_t h2o_socket_log_ssl_backend(h2o_socket_t *sock, h2o_mem_pool_t *pool);
407
int h2o_socket_ssl_new_session_cb(SSL *s, SSL_SESSION *sess);
408
409
/**
410
 * compares socket addresses
411
 */
412
int h2o_socket_compare_address(struct sockaddr *x, struct sockaddr *y, int check_port);
413
/**
414
 * getnameinfo (buf should be NI_MAXHOST in length), returns SIZE_MAX if failed
415
 */
416
size_t h2o_socket_getnumerichost(const struct sockaddr *sa, socklen_t salen, char *buf);
417
/**
418
 * returns the port number, or -1 if failed
419
 */
420
int32_t h2o_socket_getport(const struct sockaddr *sa);
421
/**
422
 * converts given error number to string representation if known, otherwise returns `default_err`
423
 */
424
const char *h2o_socket_get_error_string(int errnum, const char *default_err);
425
/**
426
 * performs SSL handshake on a socket
427
 * @param sock the socket
428
 * @param ssl_ctx SSL context
429
 * @param handshake_cb callback to be called when handshake is complete
430
 */
431
void h2o_socket_ssl_handshake(h2o_socket_t *sock, SSL_CTX *ssl_ctx, const char *server_name, h2o_iovec_t alpn_protos,
432
                              h2o_socket_cb handshake_cb);
433
/**
434
 * resumes SSL handshake with given session data
435
 * @param sock the socket
436
 * @param session_data session data (or {NULL,0} if not available)
437
 */
438
void h2o_socket_ssl_resume_server_handshake(h2o_socket_t *sock, h2o_iovec_t session_data);
439
/**
440
 * registers callbacks to be called for handling session data
441
 */
442
void h2o_socket_ssl_async_resumption_init(h2o_socket_ssl_resumption_get_async_cb get_cb, h2o_socket_ssl_resumption_new_cb new_cb);
443
/**
444
 * setups the SSL context to use the async resumption
445
 */
446
void h2o_socket_ssl_async_resumption_setup_ctx(SSL_CTX *ctx);
447
/**
448
 * returns the name of the protocol selected using either NPN or ALPN (ALPN has the precedence).
449
 * @param sock the socket
450
 */
451
h2o_iovec_t h2o_socket_ssl_get_selected_protocol(h2o_socket_t *sock);
452
/**
453
 * returns if the socket is in early-data state (i.e. have not yet seen ClientFinished)
454
 */
455
int h2o_socket_ssl_is_early_data(h2o_socket_t *sock);
456
/**
457
 *
458
 */
459
struct st_ptls_context_t *h2o_socket_ssl_get_picotls_context(SSL_CTX *ossl);
460
/**
461
 * associates a picotls context to SSL_CTX
462
 */
463
void h2o_socket_ssl_set_picotls_context(SSL_CTX *ossl, struct st_ptls_context_t *ptls);
464
/**
465
 *
466
 */
467
h2o_cache_t *h2o_socket_ssl_get_session_cache(SSL_CTX *ctx);
468
/**
469
 *
470
 */
471
void h2o_socket_ssl_set_session_cache(SSL_CTX *ctx, h2o_cache_t *cache);
472
/**
473
 *
474
 */
475
void h2o_socket_ssl_destroy_session_cache_entry(h2o_iovec_t value);
476
/**
477
 * registers the protocol list to be used for ALPN
478
 */
479
void h2o_ssl_register_alpn_protocols(SSL_CTX *ctx, const h2o_iovec_t *protocols);
480
/**
481
 * registers the protocol list to be used for NPN
482
 */
483
void h2o_ssl_register_npn_protocols(SSL_CTX *ctx, const char *protocols);
484
/**
485
 * Sets the DF bit if possible. Returns true when the operation was succcessful, or when the operating system does not provide the
486
 * necessary features. In either case, operation can continue with or without the DF bit being set.
487
 */
488
int h2o_socket_set_df_bit(int fd, int domain);
489
/**
490
 * returns trace state
491
 */
492
static ptls_log_conn_state_t *h2o_socket_log_state(h2o_socket_t *sock);
493
494
#if H2O_CAN_OSSL_ASYNC
495
/**
496
 * When generating a TLS handshake signature asynchronously, it is necessary to wait for a notification on a file descriptor at
497
 * which point the TLS handshake machinery is to be resumed. This function sets up a callback that would be called when that
498
 * notification is received. The callback must invoke `h2o_socket_async_handshake_on_notify` to do the necessary clean up, as well
499
 * as obtain the `data` pointer it has supplied.
500
 */
501
void h2o_socket_start_async_handshake(h2o_loop_t *loop, int async_fd, void *data, h2o_socket_cb cb);
502
/**
503
 * The function to be called by the callback supplied to `h2o_socket_start_async_handshake`. It returns the `data` pointer supplied
504
 * to `h2o_socket_start_async_handshake`.
505
 */
506
void *h2o_socket_async_handshake_on_notify(h2o_socket_t *async_sock, const char *err);
507
#endif
508
509
/**
510
 * Initializes a send vector that refers to mutable memory region. When the `proceed` callback is invoked, it is possible for the
511
 * generator to reuse (or release) that memory region.
512
 */
513
void h2o_sendvec_init_raw(h2o_sendvec_t *vec, const void *base, size_t len);
514
/**
515
 *
516
 */
517
int h2o_sendvec_read_raw(h2o_sendvec_t *vec, void *dst, size_t len);
518
519
/**
520
 * GC resources
521
 */
522
void h2o_socket_clear_recycle(int full);
523
/**
524
 *
525
 */
526
int h2o_socket_recycle_is_empty(void);
527
528
/**
529
 * This is a thin wrapper around sendfile (2) that hides the differences between various OS implementations.
530
 * @return number of bytes written (zero is a valid value indicating that the send buffer is full), or SIZE_MAX on error
531
 */
532
size_t h2o_sendfile(int sockfd, int filefd, off_t off, size_t len);
533
534
#ifdef OPENSSL_IS_BORINGSSL
535
/**
536
 * returns SSL_[gs]et_ext_data slot used to store `ptls_async_job_t` for handling async TLS handshake signature generation
537
 */
538
int h2o_socket_boringssl_get_async_job_index(void);
539
/**
540
 * If async resumption is in flight. When true is returned the TLS handshake is going to be discarded, and therefore the async
541
 * signature calculation callback should return failure rather than starting the calculation.
542
 */
543
int h2o_socket_boringssl_async_resumption_in_flight(SSL *ssl);
544
#endif
545
546
/* inline defs */
547
548
inline int h2o_socket_is_writing(h2o_socket_t *sock)
549
135k
{
550
135k
    return sock->_cb.write != NULL;
551
135k
}
Unexecuted instantiation: driver.cc:h2o_socket_is_writing(st_h2o_socket_t*)
Unexecuted instantiation: driver_common.cc:h2o_socket_is_writing(st_h2o_socket_t*)
Unexecuted instantiation: multithread.c:h2o_socket_is_writing
socket.c:h2o_socket_is_writing
Line
Count
Source
549
34.9k
{
550
    return sock->_cb.write != NULL;
551
34.9k
}
Unexecuted instantiation: socketpool.c:h2o_socket_is_writing
Unexecuted instantiation: roundrobin.c:h2o_socket_is_writing
Unexecuted instantiation: config.c:h2o_socket_is_writing
Unexecuted instantiation: configurator.c:h2o_socket_is_writing
Unexecuted instantiation: context.c:h2o_socket_is_writing
Unexecuted instantiation: headers.c:h2o_socket_is_writing
Unexecuted instantiation: request.c:h2o_socket_is_writing
Unexecuted instantiation: util.c:h2o_socket_is_writing
Unexecuted instantiation: access_log.c:h2o_socket_is_writing
Unexecuted instantiation: file.c:h2o_socket_is_writing
Unexecuted instantiation: mimemap.c:h2o_socket_is_writing
Unexecuted instantiation: proxy.c:h2o_socket_is_writing
Unexecuted instantiation: http1.c:h2o_socket_is_writing
connection.c:h2o_socket_is_writing
Line
Count
Source
549
99.6k
{
550
    return sock->_cb.write != NULL;
551
99.6k
}
Unexecuted instantiation: scheduler.c:h2o_socket_is_writing
Unexecuted instantiation: stream.c:h2o_socket_is_writing
Unexecuted instantiation: http2_debug_state.c:h2o_socket_is_writing
Unexecuted instantiation: common.c:h2o_socket_is_writing
Unexecuted instantiation: server.c:h2o_socket_is_writing
Unexecuted instantiation: hostinfo.c:h2o_socket_is_writing
Unexecuted instantiation: http3client.c:h2o_socket_is_writing
Unexecuted instantiation: httpclient.c:h2o_socket_is_writing
Unexecuted instantiation: memcached.c:h2o_socket_is_writing
Unexecuted instantiation: redis.c:h2o_socket_is_writing
Unexecuted instantiation: serverutil.c:h2o_socket_is_writing
Unexecuted instantiation: absprio.c:h2o_socket_is_writing
Unexecuted instantiation: logconf.c:h2o_socket_is_writing
Unexecuted instantiation: compress.c:h2o_socket_is_writing
Unexecuted instantiation: gzip.c:h2o_socket_is_writing
Unexecuted instantiation: headers_util.c:h2o_socket_is_writing
Unexecuted instantiation: frame.c:h2o_socket_is_writing
Unexecuted instantiation: qpack.c:h2o_socket_is_writing
http1client.c:h2o_socket_is_writing
Line
Count
Source
549
779
{
550
    return sock->_cb.write != NULL;
551
779
}
Unexecuted instantiation: http2client.c:h2o_socket_is_writing
Unexecuted instantiation: pipe_sender.c:h2o_socket_is_writing
Unexecuted instantiation: driver_url.cc:h2o_socket_is_writing(st_h2o_socket_t*)
Unexecuted instantiation: driver_h3.cc:h2o_socket_is_writing(st_h2o_socket_t*)
Unexecuted instantiation: least_conn.c:h2o_socket_is_writing
Unexecuted instantiation: errordoc.c:h2o_socket_is_writing
Unexecuted instantiation: expires.c:h2o_socket_is_writing
Unexecuted instantiation: fastcgi.c:h2o_socket_is_writing
Unexecuted instantiation: h2olog.c:h2o_socket_is_writing
Unexecuted instantiation: connect.c:h2o_socket_is_writing
Unexecuted instantiation: redirect.c:h2o_socket_is_writing
Unexecuted instantiation: reproxy.c:h2o_socket_is_writing
Unexecuted instantiation: throttle_resp.c:h2o_socket_is_writing
Unexecuted instantiation: self_trace.c:h2o_socket_is_writing
Unexecuted instantiation: server_timing.c:h2o_socket_is_writing
Unexecuted instantiation: status.c:h2o_socket_is_writing
Unexecuted instantiation: events.c:h2o_socket_is_writing
Unexecuted instantiation: memory.c:h2o_socket_is_writing
Unexecuted instantiation: requests.c:h2o_socket_is_writing
Unexecuted instantiation: ssl.c:h2o_socket_is_writing
Unexecuted instantiation: durations.c:h2o_socket_is_writing
Unexecuted instantiation: brotli.c:h2o_socket_is_writing
552
553
inline int h2o_socket_is_reading(h2o_socket_t *sock)
554
139k
{
555
139k
    return sock->_cb.read != NULL;
556
139k
}
Unexecuted instantiation: driver.cc:h2o_socket_is_reading(st_h2o_socket_t*)
Unexecuted instantiation: driver_common.cc:h2o_socket_is_reading(st_h2o_socket_t*)
Unexecuted instantiation: multithread.c:h2o_socket_is_reading
socket.c:h2o_socket_is_reading
Line
Count
Source
554
34.9k
{
555
    return sock->_cb.read != NULL;
556
34.9k
}
Unexecuted instantiation: socketpool.c:h2o_socket_is_reading
Unexecuted instantiation: roundrobin.c:h2o_socket_is_reading
Unexecuted instantiation: config.c:h2o_socket_is_reading
Unexecuted instantiation: configurator.c:h2o_socket_is_reading
Unexecuted instantiation: context.c:h2o_socket_is_reading
Unexecuted instantiation: headers.c:h2o_socket_is_reading
Unexecuted instantiation: request.c:h2o_socket_is_reading
Unexecuted instantiation: util.c:h2o_socket_is_reading
Unexecuted instantiation: access_log.c:h2o_socket_is_reading
Unexecuted instantiation: file.c:h2o_socket_is_reading
Unexecuted instantiation: mimemap.c:h2o_socket_is_reading
Unexecuted instantiation: proxy.c:h2o_socket_is_reading
Unexecuted instantiation: http1.c:h2o_socket_is_reading
connection.c:h2o_socket_is_reading
Line
Count
Source
554
94.9k
{
555
    return sock->_cb.read != NULL;
556
94.9k
}
Unexecuted instantiation: scheduler.c:h2o_socket_is_reading
Unexecuted instantiation: stream.c:h2o_socket_is_reading
Unexecuted instantiation: http2_debug_state.c:h2o_socket_is_reading
Unexecuted instantiation: common.c:h2o_socket_is_reading
Unexecuted instantiation: server.c:h2o_socket_is_reading
Unexecuted instantiation: hostinfo.c:h2o_socket_is_reading
Unexecuted instantiation: http3client.c:h2o_socket_is_reading
Unexecuted instantiation: httpclient.c:h2o_socket_is_reading
Unexecuted instantiation: memcached.c:h2o_socket_is_reading
Unexecuted instantiation: redis.c:h2o_socket_is_reading
Unexecuted instantiation: serverutil.c:h2o_socket_is_reading
Unexecuted instantiation: absprio.c:h2o_socket_is_reading
Unexecuted instantiation: logconf.c:h2o_socket_is_reading
Unexecuted instantiation: compress.c:h2o_socket_is_reading
Unexecuted instantiation: gzip.c:h2o_socket_is_reading
Unexecuted instantiation: headers_util.c:h2o_socket_is_reading
Unexecuted instantiation: frame.c:h2o_socket_is_reading
Unexecuted instantiation: qpack.c:h2o_socket_is_reading
http1client.c:h2o_socket_is_reading
Line
Count
Source
554
9.54k
{
555
    return sock->_cb.read != NULL;
556
9.54k
}
Unexecuted instantiation: http2client.c:h2o_socket_is_reading
Unexecuted instantiation: pipe_sender.c:h2o_socket_is_reading
Unexecuted instantiation: driver_url.cc:h2o_socket_is_reading(st_h2o_socket_t*)
Unexecuted instantiation: driver_h3.cc:h2o_socket_is_reading(st_h2o_socket_t*)
Unexecuted instantiation: least_conn.c:h2o_socket_is_reading
Unexecuted instantiation: errordoc.c:h2o_socket_is_reading
Unexecuted instantiation: expires.c:h2o_socket_is_reading
Unexecuted instantiation: fastcgi.c:h2o_socket_is_reading
Unexecuted instantiation: h2olog.c:h2o_socket_is_reading
Unexecuted instantiation: connect.c:h2o_socket_is_reading
Unexecuted instantiation: redirect.c:h2o_socket_is_reading
Unexecuted instantiation: reproxy.c:h2o_socket_is_reading
Unexecuted instantiation: throttle_resp.c:h2o_socket_is_reading
Unexecuted instantiation: self_trace.c:h2o_socket_is_reading
Unexecuted instantiation: server_timing.c:h2o_socket_is_reading
Unexecuted instantiation: status.c:h2o_socket_is_reading
Unexecuted instantiation: events.c:h2o_socket_is_reading
Unexecuted instantiation: memory.c:h2o_socket_is_reading
Unexecuted instantiation: requests.c:h2o_socket_is_reading
Unexecuted instantiation: ssl.c:h2o_socket_is_reading
Unexecuted instantiation: durations.c:h2o_socket_is_reading
Unexecuted instantiation: brotli.c:h2o_socket_is_reading
557
558
inline size_t h2o_socket_prepare_for_latency_optimized_write(h2o_socket_t *sock,
559
                                                             const h2o_socket_latency_optimization_conditions_t *conditions)
560
37.4k
{
561
37.4k
    switch (sock->_latency_optimization.state) {
562
6.96k
    case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_TBD:
563
6.96k
    case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_NEEDS_UPDATE:
564
6.96k
        return h2o_socket_do_prepare_for_latency_optimized_write(sock, conditions);
565
30.5k
    default:
566
30.5k
        return sock->_latency_optimization.suggested_write_size;
567
37.4k
    }
568
37.4k
}
Unexecuted instantiation: driver.cc:h2o_socket_prepare_for_latency_optimized_write(st_h2o_socket_t*, st_h2o_socket_latency_optimization_conditions_t const*)
Unexecuted instantiation: driver_common.cc:h2o_socket_prepare_for_latency_optimized_write(st_h2o_socket_t*, st_h2o_socket_latency_optimization_conditions_t const*)
Unexecuted instantiation: multithread.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: socket.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: socketpool.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: roundrobin.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: config.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: configurator.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: context.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: headers.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: request.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: util.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: access_log.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: file.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: mimemap.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: proxy.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: http1.c:h2o_socket_prepare_for_latency_optimized_write
connection.c:h2o_socket_prepare_for_latency_optimized_write
Line
Count
Source
560
30.7k
{
561
30.7k
    switch (sock->_latency_optimization.state) {
562
6.96k
    case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_TBD:
563
6.96k
    case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_NEEDS_UPDATE:
564
6.96k
        return h2o_socket_do_prepare_for_latency_optimized_write(sock, conditions);
565
23.7k
    default:
566
23.7k
        return sock->_latency_optimization.suggested_write_size;
567
30.7k
    }
568
30.7k
}
Unexecuted instantiation: scheduler.c:h2o_socket_prepare_for_latency_optimized_write
stream.c:h2o_socket_prepare_for_latency_optimized_write
Line
Count
Source
560
6.77k
{
561
6.77k
    switch (sock->_latency_optimization.state) {
562
0
    case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_TBD:
563
0
    case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_NEEDS_UPDATE:
564
0
        return h2o_socket_do_prepare_for_latency_optimized_write(sock, conditions);
565
6.77k
    default:
566
6.77k
        return sock->_latency_optimization.suggested_write_size;
567
6.77k
    }
568
6.77k
}
Unexecuted instantiation: http2_debug_state.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: common.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: server.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: hostinfo.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: http3client.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: httpclient.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: memcached.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: redis.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: serverutil.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: absprio.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: logconf.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: compress.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: gzip.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: headers_util.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: frame.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: qpack.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: http1client.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: http2client.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: pipe_sender.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: driver_url.cc:h2o_socket_prepare_for_latency_optimized_write(st_h2o_socket_t*, st_h2o_socket_latency_optimization_conditions_t const*)
Unexecuted instantiation: driver_h3.cc:h2o_socket_prepare_for_latency_optimized_write(st_h2o_socket_t*, st_h2o_socket_latency_optimization_conditions_t const*)
Unexecuted instantiation: least_conn.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: errordoc.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: expires.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: fastcgi.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: h2olog.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: connect.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: redirect.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: reproxy.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: throttle_resp.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: self_trace.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: server_timing.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: status.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: events.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: memory.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: requests.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: ssl.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: durations.c:h2o_socket_prepare_for_latency_optimized_write
Unexecuted instantiation: brotli.c:h2o_socket_prepare_for_latency_optimized_write
569
570
inline h2o_iovec_t h2o_socket_log_ssl_protocol_version(h2o_socket_t *sock, h2o_mem_pool_t *pool)
571
0
{
572
0
    (void)pool;
573
0
    const char *s = h2o_socket_get_ssl_protocol_version(sock);
574
0
    return s != NULL ? h2o_iovec_init(s, strlen(s)) : h2o_iovec_init(NULL, 0);
575
0
}
Unexecuted instantiation: driver.cc:h2o_socket_log_ssl_protocol_version(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: driver_common.cc:h2o_socket_log_ssl_protocol_version(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: multithread.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: socket.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: socketpool.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: roundrobin.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: config.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: configurator.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: context.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: headers.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: request.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: util.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: access_log.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: file.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: mimemap.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: proxy.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: http1.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: connection.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: scheduler.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: stream.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: common.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: server.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: hostinfo.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: http3client.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: httpclient.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: memcached.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: redis.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: serverutil.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: absprio.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: logconf.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: compress.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: gzip.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: headers_util.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: frame.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: qpack.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: http1client.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: http2client.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: pipe_sender.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: driver_url.cc:h2o_socket_log_ssl_protocol_version(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: driver_h3.cc:h2o_socket_log_ssl_protocol_version(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: least_conn.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: errordoc.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: expires.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: fastcgi.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: h2olog.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: connect.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: redirect.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: reproxy.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: throttle_resp.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: self_trace.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: server_timing.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: status.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: events.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: memory.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: requests.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: ssl.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: durations.c:h2o_socket_log_ssl_protocol_version
Unexecuted instantiation: brotli.c:h2o_socket_log_ssl_protocol_version
576
577
inline h2o_iovec_t h2o_socket_log_ssl_session_reused(h2o_socket_t *sock, h2o_mem_pool_t *pool)
578
0
{
579
0
    (void)pool;
580
0
    switch (h2o_socket_get_ssl_session_reused(sock)) {
581
0
    case 0:
582
0
        return h2o_iovec_init(H2O_STRLIT("0"));
583
0
    case 1:
584
0
        return h2o_iovec_init(H2O_STRLIT("1"));
585
0
    default:
586
0
        return h2o_iovec_init(NULL, 0);
587
0
    }
588
0
}
Unexecuted instantiation: driver.cc:h2o_socket_log_ssl_session_reused(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: driver_common.cc:h2o_socket_log_ssl_session_reused(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: multithread.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: socket.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: socketpool.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: roundrobin.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: config.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: configurator.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: context.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: headers.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: request.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: util.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: access_log.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: file.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: mimemap.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: proxy.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: http1.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: connection.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: scheduler.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: stream.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: common.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: server.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: hostinfo.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: http3client.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: httpclient.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: memcached.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: redis.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: serverutil.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: absprio.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: logconf.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: compress.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: gzip.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: headers_util.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: frame.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: qpack.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: http1client.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: http2client.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: pipe_sender.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: driver_url.cc:h2o_socket_log_ssl_session_reused(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: driver_h3.cc:h2o_socket_log_ssl_session_reused(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: least_conn.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: errordoc.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: expires.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: fastcgi.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: h2olog.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: connect.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: redirect.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: reproxy.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: throttle_resp.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: self_trace.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: server_timing.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: status.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: events.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: memory.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: requests.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: ssl.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: durations.c:h2o_socket_log_ssl_session_reused
Unexecuted instantiation: brotli.c:h2o_socket_log_ssl_session_reused
589
590
inline h2o_iovec_t h2o_socket_log_ssl_cipher(h2o_socket_t *sock, h2o_mem_pool_t *pool)
591
0
{
592
0
    (void)pool;
593
0
    const char *s = h2o_socket_get_ssl_cipher(sock);
594
0
    return s != NULL ? h2o_iovec_init(s, strlen(s)) : h2o_iovec_init(NULL, 0);
595
0
}
Unexecuted instantiation: driver.cc:h2o_socket_log_ssl_cipher(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: driver_common.cc:h2o_socket_log_ssl_cipher(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: multithread.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: socket.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: socketpool.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: roundrobin.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: config.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: configurator.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: context.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: headers.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: request.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: util.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: access_log.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: file.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: mimemap.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: proxy.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: http1.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: connection.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: scheduler.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: stream.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: common.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: server.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: hostinfo.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: http3client.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: httpclient.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: memcached.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: redis.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: serverutil.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: absprio.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: logconf.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: compress.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: gzip.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: headers_util.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: frame.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: qpack.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: http1client.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: http2client.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: pipe_sender.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: driver_url.cc:h2o_socket_log_ssl_cipher(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: driver_h3.cc:h2o_socket_log_ssl_cipher(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: least_conn.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: errordoc.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: expires.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: fastcgi.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: h2olog.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: connect.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: redirect.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: reproxy.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: throttle_resp.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: self_trace.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: server_timing.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: status.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: events.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: memory.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: requests.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: ssl.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: durations.c:h2o_socket_log_ssl_cipher
Unexecuted instantiation: brotli.c:h2o_socket_log_ssl_cipher
596
597
inline h2o_iovec_t h2o_socket_log_ssl_server_name(h2o_socket_t *sock, h2o_mem_pool_t *pool)
598
0
{
599
0
    (void)pool;
600
0
    const char *s = h2o_socket_get_ssl_server_name(sock);
601
0
    return s != NULL ? h2o_iovec_init(s, strlen(s)) : h2o_iovec_init(NULL, 0);
602
0
}
Unexecuted instantiation: driver.cc:h2o_socket_log_ssl_server_name(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: driver_common.cc:h2o_socket_log_ssl_server_name(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: multithread.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: socket.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: socketpool.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: roundrobin.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: config.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: configurator.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: context.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: headers.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: request.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: util.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: access_log.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: file.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: mimemap.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: proxy.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: http1.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: connection.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: scheduler.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: stream.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: common.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: server.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: hostinfo.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: http3client.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: httpclient.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: memcached.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: redis.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: serverutil.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: absprio.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: logconf.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: compress.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: gzip.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: headers_util.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: frame.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: qpack.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: http1client.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: http2client.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: pipe_sender.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: driver_url.cc:h2o_socket_log_ssl_server_name(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: driver_h3.cc:h2o_socket_log_ssl_server_name(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: least_conn.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: errordoc.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: expires.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: fastcgi.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: h2olog.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: connect.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: redirect.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: reproxy.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: throttle_resp.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: self_trace.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: server_timing.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: status.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: events.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: memory.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: requests.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: ssl.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: durations.c:h2o_socket_log_ssl_server_name
Unexecuted instantiation: brotli.c:h2o_socket_log_ssl_server_name
603
604
inline h2o_iovec_t h2o_socket_log_ssl_negotiated_protocol(h2o_socket_t *sock, h2o_mem_pool_t *pool)
605
0
{
606
0
    (void)pool;
607
0
    return h2o_socket_ssl_get_selected_protocol(sock);
608
0
}
Unexecuted instantiation: driver.cc:h2o_socket_log_ssl_negotiated_protocol(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: driver_common.cc:h2o_socket_log_ssl_negotiated_protocol(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: multithread.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: socket.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: socketpool.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: roundrobin.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: config.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: configurator.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: context.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: headers.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: request.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: util.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: access_log.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: file.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: mimemap.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: proxy.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: http1.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: connection.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: scheduler.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: stream.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: common.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: server.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: hostinfo.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: http3client.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: httpclient.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: memcached.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: redis.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: serverutil.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: absprio.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: logconf.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: compress.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: gzip.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: headers_util.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: frame.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: qpack.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: http1client.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: http2client.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: pipe_sender.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: driver_url.cc:h2o_socket_log_ssl_negotiated_protocol(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: driver_h3.cc:h2o_socket_log_ssl_negotiated_protocol(st_h2o_socket_t*, st_h2o_mem_pool_t*)
Unexecuted instantiation: least_conn.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: errordoc.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: expires.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: fastcgi.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: h2olog.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: connect.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: redirect.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: reproxy.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: throttle_resp.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: self_trace.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: server_timing.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: status.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: events.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: memory.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: requests.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: ssl.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: durations.c:h2o_socket_log_ssl_negotiated_protocol
Unexecuted instantiation: brotli.c:h2o_socket_log_ssl_negotiated_protocol
609
610
inline int h2o_sliding_counter_is_running(h2o_sliding_counter_t *counter)
611
1.83M
{
612
1.83M
    return counter->cur.start_at != 0;
613
1.83M
}
Unexecuted instantiation: driver.cc:h2o_sliding_counter_is_running(st_h2o_sliding_counter_t*)
Unexecuted instantiation: driver_common.cc:h2o_sliding_counter_is_running(st_h2o_sliding_counter_t*)
Unexecuted instantiation: multithread.c:h2o_sliding_counter_is_running
socket.c:h2o_sliding_counter_is_running
Line
Count
Source
611
1.83M
{
612
1.83M
    return counter->cur.start_at != 0;
613
1.83M
}
Unexecuted instantiation: socketpool.c:h2o_sliding_counter_is_running
Unexecuted instantiation: roundrobin.c:h2o_sliding_counter_is_running
Unexecuted instantiation: config.c:h2o_sliding_counter_is_running
Unexecuted instantiation: configurator.c:h2o_sliding_counter_is_running
Unexecuted instantiation: context.c:h2o_sliding_counter_is_running
Unexecuted instantiation: headers.c:h2o_sliding_counter_is_running
Unexecuted instantiation: request.c:h2o_sliding_counter_is_running
Unexecuted instantiation: util.c:h2o_sliding_counter_is_running
Unexecuted instantiation: access_log.c:h2o_sliding_counter_is_running
Unexecuted instantiation: file.c:h2o_sliding_counter_is_running
Unexecuted instantiation: mimemap.c:h2o_sliding_counter_is_running
Unexecuted instantiation: proxy.c:h2o_sliding_counter_is_running
Unexecuted instantiation: http1.c:h2o_sliding_counter_is_running
Unexecuted instantiation: connection.c:h2o_sliding_counter_is_running
Unexecuted instantiation: scheduler.c:h2o_sliding_counter_is_running
Unexecuted instantiation: stream.c:h2o_sliding_counter_is_running
Unexecuted instantiation: http2_debug_state.c:h2o_sliding_counter_is_running
Unexecuted instantiation: common.c:h2o_sliding_counter_is_running
Unexecuted instantiation: server.c:h2o_sliding_counter_is_running
Unexecuted instantiation: hostinfo.c:h2o_sliding_counter_is_running
Unexecuted instantiation: http3client.c:h2o_sliding_counter_is_running
Unexecuted instantiation: httpclient.c:h2o_sliding_counter_is_running
Unexecuted instantiation: memcached.c:h2o_sliding_counter_is_running
Unexecuted instantiation: redis.c:h2o_sliding_counter_is_running
Unexecuted instantiation: serverutil.c:h2o_sliding_counter_is_running
Unexecuted instantiation: absprio.c:h2o_sliding_counter_is_running
Unexecuted instantiation: logconf.c:h2o_sliding_counter_is_running
Unexecuted instantiation: compress.c:h2o_sliding_counter_is_running
Unexecuted instantiation: gzip.c:h2o_sliding_counter_is_running
Unexecuted instantiation: headers_util.c:h2o_sliding_counter_is_running
Unexecuted instantiation: frame.c:h2o_sliding_counter_is_running
Unexecuted instantiation: qpack.c:h2o_sliding_counter_is_running
Unexecuted instantiation: http1client.c:h2o_sliding_counter_is_running
Unexecuted instantiation: http2client.c:h2o_sliding_counter_is_running
Unexecuted instantiation: pipe_sender.c:h2o_sliding_counter_is_running
Unexecuted instantiation: driver_url.cc:h2o_sliding_counter_is_running(st_h2o_sliding_counter_t*)
Unexecuted instantiation: driver_h3.cc:h2o_sliding_counter_is_running(st_h2o_sliding_counter_t*)
Unexecuted instantiation: least_conn.c:h2o_sliding_counter_is_running
Unexecuted instantiation: errordoc.c:h2o_sliding_counter_is_running
Unexecuted instantiation: expires.c:h2o_sliding_counter_is_running
Unexecuted instantiation: fastcgi.c:h2o_sliding_counter_is_running
Unexecuted instantiation: h2olog.c:h2o_sliding_counter_is_running
Unexecuted instantiation: connect.c:h2o_sliding_counter_is_running
Unexecuted instantiation: redirect.c:h2o_sliding_counter_is_running
Unexecuted instantiation: reproxy.c:h2o_sliding_counter_is_running
Unexecuted instantiation: throttle_resp.c:h2o_sliding_counter_is_running
Unexecuted instantiation: self_trace.c:h2o_sliding_counter_is_running
Unexecuted instantiation: server_timing.c:h2o_sliding_counter_is_running
Unexecuted instantiation: status.c:h2o_sliding_counter_is_running
Unexecuted instantiation: events.c:h2o_sliding_counter_is_running
Unexecuted instantiation: memory.c:h2o_sliding_counter_is_running
Unexecuted instantiation: requests.c:h2o_sliding_counter_is_running
Unexecuted instantiation: ssl.c:h2o_sliding_counter_is_running
Unexecuted instantiation: durations.c:h2o_sliding_counter_is_running
Unexecuted instantiation: brotli.c:h2o_sliding_counter_is_running
614
615
inline void h2o_sliding_counter_start(h2o_sliding_counter_t *counter, uint64_t now)
616
41.3k
{
617
41.3k
    counter->cur.start_at = now;
618
41.3k
}
Unexecuted instantiation: driver.cc:h2o_sliding_counter_start(st_h2o_sliding_counter_t*, unsigned long)
Unexecuted instantiation: driver_common.cc:h2o_sliding_counter_start(st_h2o_sliding_counter_t*, unsigned long)
Unexecuted instantiation: multithread.c:h2o_sliding_counter_start
socket.c:h2o_sliding_counter_start
Line
Count
Source
616
41.3k
{
617
41.3k
    counter->cur.start_at = now;
618
41.3k
}
Unexecuted instantiation: socketpool.c:h2o_sliding_counter_start
Unexecuted instantiation: roundrobin.c:h2o_sliding_counter_start
Unexecuted instantiation: config.c:h2o_sliding_counter_start
Unexecuted instantiation: configurator.c:h2o_sliding_counter_start
Unexecuted instantiation: context.c:h2o_sliding_counter_start
Unexecuted instantiation: headers.c:h2o_sliding_counter_start
Unexecuted instantiation: request.c:h2o_sliding_counter_start
Unexecuted instantiation: util.c:h2o_sliding_counter_start
Unexecuted instantiation: access_log.c:h2o_sliding_counter_start
Unexecuted instantiation: file.c:h2o_sliding_counter_start
Unexecuted instantiation: mimemap.c:h2o_sliding_counter_start
Unexecuted instantiation: proxy.c:h2o_sliding_counter_start
Unexecuted instantiation: http1.c:h2o_sliding_counter_start
Unexecuted instantiation: connection.c:h2o_sliding_counter_start
Unexecuted instantiation: scheduler.c:h2o_sliding_counter_start
Unexecuted instantiation: stream.c:h2o_sliding_counter_start
Unexecuted instantiation: http2_debug_state.c:h2o_sliding_counter_start
Unexecuted instantiation: common.c:h2o_sliding_counter_start
Unexecuted instantiation: server.c:h2o_sliding_counter_start
Unexecuted instantiation: hostinfo.c:h2o_sliding_counter_start
Unexecuted instantiation: http3client.c:h2o_sliding_counter_start
Unexecuted instantiation: httpclient.c:h2o_sliding_counter_start
Unexecuted instantiation: memcached.c:h2o_sliding_counter_start
Unexecuted instantiation: redis.c:h2o_sliding_counter_start
Unexecuted instantiation: serverutil.c:h2o_sliding_counter_start
Unexecuted instantiation: absprio.c:h2o_sliding_counter_start
Unexecuted instantiation: logconf.c:h2o_sliding_counter_start
Unexecuted instantiation: compress.c:h2o_sliding_counter_start
Unexecuted instantiation: gzip.c:h2o_sliding_counter_start
Unexecuted instantiation: headers_util.c:h2o_sliding_counter_start
Unexecuted instantiation: frame.c:h2o_sliding_counter_start
Unexecuted instantiation: qpack.c:h2o_sliding_counter_start
Unexecuted instantiation: http1client.c:h2o_sliding_counter_start
Unexecuted instantiation: http2client.c:h2o_sliding_counter_start
Unexecuted instantiation: pipe_sender.c:h2o_sliding_counter_start
Unexecuted instantiation: driver_url.cc:h2o_sliding_counter_start(st_h2o_sliding_counter_t*, unsigned long)
Unexecuted instantiation: driver_h3.cc:h2o_sliding_counter_start(st_h2o_sliding_counter_t*, unsigned long)
Unexecuted instantiation: least_conn.c:h2o_sliding_counter_start
Unexecuted instantiation: errordoc.c:h2o_sliding_counter_start
Unexecuted instantiation: expires.c:h2o_sliding_counter_start
Unexecuted instantiation: fastcgi.c:h2o_sliding_counter_start
Unexecuted instantiation: h2olog.c:h2o_sliding_counter_start
Unexecuted instantiation: connect.c:h2o_sliding_counter_start
Unexecuted instantiation: redirect.c:h2o_sliding_counter_start
Unexecuted instantiation: reproxy.c:h2o_sliding_counter_start
Unexecuted instantiation: throttle_resp.c:h2o_sliding_counter_start
Unexecuted instantiation: self_trace.c:h2o_sliding_counter_start
Unexecuted instantiation: server_timing.c:h2o_sliding_counter_start
Unexecuted instantiation: status.c:h2o_sliding_counter_start
Unexecuted instantiation: events.c:h2o_sliding_counter_start
Unexecuted instantiation: memory.c:h2o_sliding_counter_start
Unexecuted instantiation: requests.c:h2o_sliding_counter_start
Unexecuted instantiation: ssl.c:h2o_sliding_counter_start
Unexecuted instantiation: durations.c:h2o_sliding_counter_start
Unexecuted instantiation: brotli.c:h2o_sliding_counter_start
619
620
inline ptls_log_conn_state_t *h2o_socket_log_state(h2o_socket_t *sock)
621
0
{
622
0
    return &sock->_log_state;
623
0
}
Unexecuted instantiation: driver.cc:h2o_socket_log_state(st_h2o_socket_t*)
Unexecuted instantiation: driver_common.cc:h2o_socket_log_state(st_h2o_socket_t*)
Unexecuted instantiation: multithread.c:h2o_socket_log_state
Unexecuted instantiation: socket.c:h2o_socket_log_state
Unexecuted instantiation: socketpool.c:h2o_socket_log_state
Unexecuted instantiation: roundrobin.c:h2o_socket_log_state
Unexecuted instantiation: config.c:h2o_socket_log_state
Unexecuted instantiation: configurator.c:h2o_socket_log_state
Unexecuted instantiation: context.c:h2o_socket_log_state
Unexecuted instantiation: headers.c:h2o_socket_log_state
Unexecuted instantiation: request.c:h2o_socket_log_state
Unexecuted instantiation: util.c:h2o_socket_log_state
Unexecuted instantiation: access_log.c:h2o_socket_log_state
Unexecuted instantiation: file.c:h2o_socket_log_state
Unexecuted instantiation: mimemap.c:h2o_socket_log_state
Unexecuted instantiation: proxy.c:h2o_socket_log_state
Unexecuted instantiation: http1.c:h2o_socket_log_state
Unexecuted instantiation: connection.c:h2o_socket_log_state
Unexecuted instantiation: scheduler.c:h2o_socket_log_state
Unexecuted instantiation: stream.c:h2o_socket_log_state
Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_state
Unexecuted instantiation: common.c:h2o_socket_log_state
Unexecuted instantiation: server.c:h2o_socket_log_state
Unexecuted instantiation: hostinfo.c:h2o_socket_log_state
Unexecuted instantiation: http3client.c:h2o_socket_log_state
Unexecuted instantiation: httpclient.c:h2o_socket_log_state
Unexecuted instantiation: memcached.c:h2o_socket_log_state
Unexecuted instantiation: redis.c:h2o_socket_log_state
Unexecuted instantiation: serverutil.c:h2o_socket_log_state
Unexecuted instantiation: absprio.c:h2o_socket_log_state
Unexecuted instantiation: logconf.c:h2o_socket_log_state
Unexecuted instantiation: compress.c:h2o_socket_log_state
Unexecuted instantiation: gzip.c:h2o_socket_log_state
Unexecuted instantiation: headers_util.c:h2o_socket_log_state
Unexecuted instantiation: frame.c:h2o_socket_log_state
Unexecuted instantiation: qpack.c:h2o_socket_log_state
Unexecuted instantiation: http1client.c:h2o_socket_log_state
Unexecuted instantiation: http2client.c:h2o_socket_log_state
Unexecuted instantiation: pipe_sender.c:h2o_socket_log_state
Unexecuted instantiation: driver_url.cc:h2o_socket_log_state(st_h2o_socket_t*)
Unexecuted instantiation: driver_h3.cc:h2o_socket_log_state(st_h2o_socket_t*)
Unexecuted instantiation: least_conn.c:h2o_socket_log_state
Unexecuted instantiation: errordoc.c:h2o_socket_log_state
Unexecuted instantiation: expires.c:h2o_socket_log_state
Unexecuted instantiation: fastcgi.c:h2o_socket_log_state
Unexecuted instantiation: h2olog.c:h2o_socket_log_state
Unexecuted instantiation: connect.c:h2o_socket_log_state
Unexecuted instantiation: redirect.c:h2o_socket_log_state
Unexecuted instantiation: reproxy.c:h2o_socket_log_state
Unexecuted instantiation: throttle_resp.c:h2o_socket_log_state
Unexecuted instantiation: self_trace.c:h2o_socket_log_state
Unexecuted instantiation: server_timing.c:h2o_socket_log_state
Unexecuted instantiation: status.c:h2o_socket_log_state
Unexecuted instantiation: events.c:h2o_socket_log_state
Unexecuted instantiation: memory.c:h2o_socket_log_state
Unexecuted instantiation: requests.c:h2o_socket_log_state
Unexecuted instantiation: ssl.c:h2o_socket_log_state
Unexecuted instantiation: durations.c:h2o_socket_log_state
Unexecuted instantiation: brotli.c:h2o_socket_log_state
624
625
#ifdef __cplusplus
626
}
627
#endif
628
629
#endif