int tport_tcp_init_secondary(tport_t *self, int socket, int accepted, char const **return_reason) { int val = 1; self->tp_has_connection = 1; self->tp_params->tpp_idle = UINT_MAX; if (setsockopt(socket, SOL_TCP, TCP_NODELAY, (void *)&val, sizeof val) == -1) return *return_reason = "TCP_NODELAY", -1; #if defined(SO_KEEPALIVE) setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, (void *)&val, sizeof val); #endif val = 30; #if defined(TCP_KEEPIDLE) setsockopt(socket, SOL_TCP, TCP_KEEPIDLE, (void *)&val, sizeof val); #endif #if defined(TCP_KEEPINTVL) setsockopt(socket, SOL_TCP, TCP_KEEPINTVL, (void *)&val, sizeof val); #endif if (!accepted) tport_tcp_setsndbuf(socket, 64 * 1024); return 0; }
int tport_tcp_init_secondary(tport_t *self, int socket, int accepted, char const **return_reason) { int one = 1; self->tp_has_connection = 1; if (setsockopt(socket, SOL_TCP, TCP_NODELAY, (void *)&one, sizeof one) == -1) return *return_reason = "TCP_NODELAY", -1; if (!accepted) tport_tcp_setsndbuf(socket, 64 * 1024); return 0; }
int tport_tcp_init_primary(tport_primary_t *pri, tp_name_t tpn[1], su_addrinfo_t *ai, tagi_t const *tags, char const **return_culprit) { int socket; socket = su_socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (socket == INVALID_SOCKET) return *return_culprit = "socket", -1; tport_tcp_setsndbuf(socket, 64 * 1024); return tport_stream_init_primary(pri, socket, tpn, ai, tags, return_culprit); }