Lines Matching refs:conn

648 static int service_tcp_fd (struct conn_state *conn,
650 static int service_udp_fd (struct conn_state *conn,
873 maybe_send (struct conn_state *conn, in maybe_send() argument
881 dprint("maybe_send(@%p) state=%s type=%s\n", conn, in maybe_send()
883 state_strings[conn->state], in maybe_send()
884 conn->is_udp ? "udp" : "tcp"); in maybe_send()
885 if (conn->state == INITIALIZING) in maybe_send()
886 return start_connection(conn, selstate, callback_info, callback_buffer); in maybe_send()
889 if (conn->state == FAILED) { in maybe_send()
894 if (conn->addr->ai_socktype == SOCK_STREAM) { in maybe_send()
903 sg = &conn->x.out.sgbuf[0]; in maybe_send()
905 dprint("sending %d bytes on fd %d\n", SG_LEN(sg), conn->fd); in maybe_send()
906 if (send(conn->fd, SG_BUF(sg), SG_LEN(sg), 0) != SG_LEN(sg)) { in maybe_send()
919 kill_conn(struct conn_state *conn, struct select_state *selstate, int err) in kill_conn() argument
921 conn->state = FAILED; in kill_conn()
922 shutdown(conn->fd, SHUTDOWN_BOTH); in kill_conn()
923 FD_CLR(conn->fd, &selstate->rfds); in kill_conn()
924 FD_CLR(conn->fd, &selstate->wfds); in kill_conn()
925 FD_CLR(conn->fd, &selstate->xfds); in kill_conn()
926 conn->err = err; in kill_conn()
928 dprint("abandoning connection %d: %m\n", conn->fd, err); in kill_conn()
930 if (selstate->max == 1 + conn->fd) { in kill_conn()
966 service_tcp_fd (struct conn_state *conn, struct select_state *selstate, in service_tcp_fd() argument
974 switch (conn->state) { in service_tcp_fd()
982 kill_conn(conn, selstate, e); in service_tcp_fd()
984 closesocket(conn->fd); in service_tcp_fd()
985 conn->fd = INVALID_SOCKET; in service_tcp_fd()
991 e = get_so_error(conn->fd); in service_tcp_fd()
1008 e = get_so_error(conn->fd); in service_tcp_fd()
1013 conn->state = WRITING; in service_tcp_fd()
1029 conn->x.out.sg_count, in service_tcp_fd()
1030 ((conn->x.out.sg_count == 2 ? SG_LEN(&conn->x.out.sgp[1]) : 0) in service_tcp_fd()
1032 + SG_LEN(&conn->x.out.sgp[0])), in service_tcp_fd()
1033 conn->fd); in service_tcp_fd()
1034 nwritten = SOCKET_WRITEV(conn->fd, conn->x.out.sgp, in service_tcp_fd()
1035 conn->x.out.sg_count, tmp); in service_tcp_fd()
1045 sg_buf *sgp = conn->x.out.sgp; in service_tcp_fd()
1051 nwritten -= SG_LEN(conn->x.out.sgp); in service_tcp_fd()
1052 conn->x.out.sgp++; in service_tcp_fd()
1053 conn->x.out.sg_count--; in service_tcp_fd()
1054 if (conn->x.out.sg_count == 0 && nwritten != 0) in service_tcp_fd()
1059 if (conn->x.out.sg_count == 0) { in service_tcp_fd()
1063 FD_CLR(conn->fd, &selstate->wfds); in service_tcp_fd()
1068 dprint("switching fd %d to READING\n", conn->fd); in service_tcp_fd()
1069 conn->state = READING; in service_tcp_fd()
1070 conn->x.in.bufsizebytes_read = 0; in service_tcp_fd()
1071 conn->x.in.bufsize = 0; in service_tcp_fd()
1072 conn->x.in.buf = 0; in service_tcp_fd()
1073 conn->x.in.pos = 0; in service_tcp_fd()
1074 conn->x.in.n_left = 0; in service_tcp_fd()
1080 if (conn->x.in.buf) { in service_tcp_fd()
1081 free(conn->x.in.buf); in service_tcp_fd()
1082 conn->x.in.buf = 0; in service_tcp_fd()
1087 if (conn->x.in.bufsizebytes_read == 4) { in service_tcp_fd()
1091 (int) conn->x.in.n_left, conn->fd); in service_tcp_fd()
1092 nread = SOCKET_READ(conn->fd, conn->x.in.pos, conn->x.in.n_left); in service_tcp_fd()
1095 free(conn->x.in.buf); in service_tcp_fd()
1096 conn->x.in.buf = 0; in service_tcp_fd()
1099 conn->x.in.n_left -= nread; in service_tcp_fd()
1100 conn->x.in.pos += nread; in service_tcp_fd()
1102 if ((long)conn->x.in.n_left <= 0) { in service_tcp_fd()
1108 nread = SOCKET_READ(conn->fd, in service_tcp_fd()
1109 conn->x.in.bufsizebytes + conn->x.in.bufsizebytes_read, in service_tcp_fd()
1110 4 - conn->x.in.bufsizebytes_read); in service_tcp_fd()
1115 conn->x.in.bufsizebytes_read += nread; in service_tcp_fd()
1116 if (conn->x.in.bufsizebytes_read == 4) { in service_tcp_fd()
1118 len = conn->x.in.bufsizebytes[0]; in service_tcp_fd()
1119 len = (len << 8) + conn->x.in.bufsizebytes[1]; in service_tcp_fd()
1120 len = (len << 8) + conn->x.in.bufsizebytes[2]; in service_tcp_fd()
1121 len = (len << 8) + conn->x.in.bufsizebytes[3]; in service_tcp_fd()
1123 dprint("received length on fd %d is %d\n", conn->fd, (int)len); in service_tcp_fd()
1129 conn->x.in.bufsize = conn->x.in.n_left = len; in service_tcp_fd()
1130 conn->x.in.buf = conn->x.in.pos = malloc(len); in service_tcp_fd()
1133 conn->x.in.buf); in service_tcp_fd()
1134 if (conn->x.in.buf == 0) { in service_tcp_fd()
1150 service_udp_fd(struct conn_state *conn, struct select_state *selstate, in service_udp_fd() argument
1157 if (conn->state != READING) in service_udp_fd()
1160 nread = recv(conn->fd, conn->x.in.buf, conn->x.in.bufsize, 0); in service_udp_fd()
1162 kill_conn(conn, selstate, SOCKET_ERRNO); in service_udp_fd()
1165 conn->x.in.pos = conn->x.in.buf + nread; in service_udp_fd()