Lines Matching +full:poll +full:- +full:timeout +full:- +full:ms
1 #include <sys/poll.h>
68 ssl = conn->ssl = SSL_new(ctx); in new_conn()
104 conn->fd = fd; in new_conn()
109 * Non-blocking transmission.
111 * Returns -1 on error. Returns -2 if the function would block (corresponds to
118 conn->tx_need_rx = 0; in tx()
120 l = SSL_write(conn->ssl, buf, buf_len); in tx()
122 rc = SSL_get_error(conn->ssl, l); in tx()
125 conn->tx_need_rx = 1; in tx()
128 return -2; in tx()
130 return -1; in tx()
138 * Non-blocking reception.
140 * Returns -1 on error. Returns -2 if the function would block (corresponds to
147 conn->rx_need_tx = 0; in rx()
149 l = SSL_read(conn->ssl, buf, buf_len); in rx()
151 rc = SSL_get_error(conn->ssl, l); in rx()
154 conn->rx_need_tx = 1; in rx()
156 return -2; in rx()
158 return -1; in rx()
166 * The application wants to know a fd it can poll on to determine when the
182 return conn->fd; in get_conn_fd()
201 return (SSL_net_read_desired(conn->ssl) ? POLLIN : 0) in get_conn_pending_tx()
202 | (SSL_net_write_desired(conn->ssl) ? POLLOUT : 0) in get_conn_pending_tx()
205 return (conn->tx_need_rx ? POLLIN : 0) | POLLOUT | POLLERR; in get_conn_pending_tx()
217 * made. Any call (SSL_read/SSL_write/SSL_pump) will do. Returns -1 if there is
228 if (!SSL_get_event_timeout(conn->ssl, &tv, &is_infinite)) in get_conn_pump_timeout()
229 return -1; in get_conn_pump_timeout()
231 return is_infinite ? -1 : timeval_to_ms(&tv); in get_conn_pump_timeout()
236 * perform an application-level read/write.
240 SSL_handle_events(conn->ssl); in pump()
250 SSL_shutdown(conn->ssl); in teardown()
251 SSL_free(conn->ssl); in teardown()
281 static inline void ms_to_timeval(struct timeval *t, int ms) in ms_to_timeval() argument
283 t->tv_sec = ms < 0 ? -1 : ms/1000; in ms_to_timeval()
284 t->tv_usec = ms < 0 ? 0 : (ms%1000)*1000; in ms_to_timeval()
289 return t->tv_sec*1000 + t->tv_usec/1000; in timeval_to_ms()
296 int rc, fd = -1, res = 1; in main()
302 struct timeval timeout; in main() local
304 int timeout = 2000 /* ms */; in main() local
311 ms_to_timeval(&timeout, 2000); in main()
349 rc = connect(fd, result->ai_addr, result->ai_addrlen); in main()
372 tx_len -= l; in main()
373 } else if (l == -1) { in main()
376 } else if (l == -2) { in main()
384 if (t.tv_sec < 0 || timercmp(&t, &timeout, >)) in main()
385 t = timeout; in main()
388 timeradd(&start, &timeout, &deadline); in main()
394 if (poll(&pfd, 1, timeval_to_ms(&t)) == 0) in main()
396 if (poll(&pfd, 1, timeout) == 0) in main()
406 fprintf(stderr, "tx timeout\n"); in main()
418 } else if (l == -1) { in main()
420 } else if (l == -2) { in main()
428 if (t.tv_sec < 0 || timercmp(&t, &timeout, >)) in main()
429 t = timeout; in main()
432 timeradd(&start, &timeout, &deadline); in main()
438 if (poll(&pfd, 1, timeval_to_ms(&t)) == 0) in main()
440 if (poll(&pfd, 1, timeout) == 0) in main()
449 fprintf(stderr, "rx timeout\n"); in main()