http1_minimal_response(struct req *req, uint16_t status) { ssize_t wl, l; char buf[80]; const char *reason; assert(status >= 100); assert(status < 1000); reason = http_Status2Reason(status, NULL); l = snprintf(buf, sizeof(buf), "HTTP/1.1 %03d %s\r\n\r\n", status, reason); assert (l < sizeof(buf)); VSLb(req->vsl, SLT_RespProtocol, "HTTP/1.1"); VSLb(req->vsl, SLT_RespStatus, "%03d", status); VSLb(req->vsl, SLT_RespReason, "%s", reason); if (status >= 400) req->err_code = status; wl = write(req->sp->fd, buf, l); if (wl > 0) req->acct.resp_hdrbytes += wl; if (wl != l) { if (wl < 0) VTCP_Assert(1); if (!req->doclose) req->doclose = SC_REM_CLOSE; return (-1); } return (0); }
vmod_set_ip_tos(const struct vrt_ctx *ctx, VCL_INT tos) { int itos = tos; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); VTCP_Assert(setsockopt(ctx->req->sp->fd, IPPROTO_IP, IP_TOS, &itos, sizeof(itos))); }
int VTCP_nonblocking(int sock) { int i, j; i = 1; j = ioctl(sock, FIONBIO, &i); VTCP_Assert(j); return (j); }
int VTCP_linger(int sock, int linger) { struct linger lin; int i; memset(&lin, 0, sizeof lin); lin.l_onoff = linger; i = setsockopt(sock, SOL_SOCKET, SO_LINGER, &lin, sizeof lin); VTCP_Assert(i); return (i); }
vmod_set_ip_tos(VRT_CTX, VCL_INT tos) { struct suckaddr *sa; int itos = tos; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); AZ(SES_Get_local_addr(ctx->req->sp, &sa)); /* Silently ignore for non-IP addresses. */ if (VSA_Compare(sa, bogo_ip) == 0) return; VTCP_Assert(setsockopt(ctx->req->sp->fd, IPPROTO_IP, IP_TOS, &itos, sizeof(itos))); }
void VTCP_set_read_timeout(int s, double seconds) { struct timeval timeout; timeout.tv_sec = (int)floor(seconds); timeout.tv_usec = (int)(1e6 * (seconds - timeout.tv_sec)); #ifdef SO_RCVTIMEO_WORKS /* * Solaris bug (present at least in snv_151 and older): If this fails * with EINVAL, the socket is half-closed (SS_CANTSENDMORE) and the * timeout does not get set. Needs to be fixed in Solaris, there is * nothing we can do about this. */ VTCP_Assert(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof timeout)); #else (void)s; #endif }
vmod_set_ip_tos(struct sess *sp, int tos) { VTCP_Assert(setsockopt(sp->fd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos))); }