size_t recv_max; /* max enforced read size */
#endif
BIT(got_first_byte); /* if first byte was received */
+ BIT(listening); /* socket is listening */
BIT(accepted); /* socket was accepted, not connected */
BIT(sock_connected); /* socket is "connected", e.g. in UDP */
BIT(active);
if(ctx->sock != CURL_SOCKET_BAD) {
if(!cf->connected) {
- Curl_pollset_set_out_only(data, ps, ctx->sock);
- CURL_TRC_CF(data, cf, "adjust_pollset, !connected, POLLOUT fd=%"
- FMT_SOCKET_T, ctx->sock);
+ if(ctx->listening) {
+ Curl_pollset_set_in_only(data, ps, ctx->sock);
+ CURL_TRC_CF(data, cf, "adjust_pollset, listening, POLLIN fd=%"
+ FMT_SOCKET_T, ctx->sock);
+ }
+ else {
+ Curl_pollset_set_out_only(data, ps, ctx->sock);
+ CURL_TRC_CF(data, cf, "adjust_pollset, !connected, POLLOUT fd=%"
+ FMT_SOCKET_T, ctx->sock);
+ }
}
else if(!ctx->active) {
Curl_pollset_add_in(data, ps, ctx->sock);
}
ctx->transport = conn->transport;
ctx->sock = *s;
+ ctx->listening = TRUE;
ctx->accepted = FALSE;
result = Curl_cf_create(&cf, &Curl_cft_tcp_accept, ctx);
if(result)
return CURLE_FAILED_INIT;
ctx = cf->ctx;
+ DEBUGASSERT(ctx->listening);
/* discard the listen socket */
socket_close(data, conn, TRUE, ctx->sock);
+ ctx->listening = FALSE;
ctx->sock = *s;
conn->sock[sockindex] = ctx->sock;
set_accepted_remote_ip(cf, data);