Lines Matching refs:so
272 #define CONN_CANFSEND(so) (((so)->so_state & (SS_FCANTSENDMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED) argument
273 #define CONN_CANFRCV(so) (((so)->so_state & (SS_FCANTRCVMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED) argument
304 struct socket *so, *so_next; in slirp_select_fill() local
327 for (so = tcb.so_next; so != &tcb; so = so_next) { in slirp_select_fill()
328 so_next = so->so_next; in slirp_select_fill()
333 if (time_fasttimo == 0 && so->so_tcpcb->t_flags & TF_DELACK) in slirp_select_fill()
340 if (so->so_state & SS_NOFDREF || so->s == -1) in slirp_select_fill()
346 if ((so->so_state & SS_PROXIFIED) != 0) in slirp_select_fill()
352 if (so->so_state & SS_FACCEPTCONN) { in slirp_select_fill()
353 FD_SET(so->s, readfds); in slirp_select_fill()
354 UPD_NFDS(so->s); in slirp_select_fill()
361 if (so->so_state & SS_ISFCONNECTING) { in slirp_select_fill()
362 FD_SET(so->s, writefds); in slirp_select_fill()
363 UPD_NFDS(so->s); in slirp_select_fill()
371 if (CONN_CANFSEND(so) && so->so_rcv.sb_cc) { in slirp_select_fill()
372 FD_SET(so->s, writefds); in slirp_select_fill()
373 UPD_NFDS(so->s); in slirp_select_fill()
380 if (CONN_CANFRCV(so) && (so->so_snd.sb_cc < (so->so_snd.sb_datalen/2))) { in slirp_select_fill()
381 FD_SET(so->s, readfds); in slirp_select_fill()
382 FD_SET(so->s, xfds); in slirp_select_fill()
383 UPD_NFDS(so->s); in slirp_select_fill()
390 for (so = udb.so_next; so != &udb; so = so_next) { in slirp_select_fill()
391 so_next = so->so_next; in slirp_select_fill()
393 if ((so->so_state & SS_PROXIFIED) != 0) in slirp_select_fill()
399 if (so->so_expire) { in slirp_select_fill()
400 if (so->so_expire <= curtime) { in slirp_select_fill()
401 udp_detach(so); in slirp_select_fill()
417 if ((so->so_state & SS_ISFCONNECTED) && so->so_queued <= 4) { in slirp_select_fill()
418 FD_SET(so->s, readfds); in slirp_select_fill()
419 UPD_NFDS(so->s); in slirp_select_fill()
467 struct socket *so, *so_next; in slirp_select_poll() local
499 for (so = tcb.so_next; so != &tcb; so = so_next) { in slirp_select_poll()
500 so_next = so->so_next; in slirp_select_poll()
506 if (so->so_state & SS_NOFDREF || so->s == -1) in slirp_select_poll()
513 if ((so->so_state & SS_PROXIFIED) != 0) in slirp_select_poll()
521 if (FD_ISSET(so->s, xfds)) in slirp_select_poll()
522 sorecvoob(so); in slirp_select_poll()
526 else if (FD_ISSET(so->s, readfds)) { in slirp_select_poll()
530 if (so->so_state & SS_FACCEPTCONN) { in slirp_select_poll()
531 tcp_connect(so); in slirp_select_poll()
534 ret = soread(so); in slirp_select_poll()
538 tcp_output(sototcpcb(so)); in slirp_select_poll()
544 if (FD_ISSET(so->s, writefds)) { in slirp_select_poll()
548 if (so->so_state & SS_ISFCONNECTING) { in slirp_select_poll()
550 so->so_state &= ~SS_ISFCONNECTING; in slirp_select_poll()
552 ret = socket_send(so->s, (const void *)&ret, 0); in slirp_select_poll()
560 so->so_state = SS_NOFDREF; in slirp_select_poll()
567 tcp_input((struct mbuf *)NULL, sizeof(struct ip), so); in slirp_select_poll()
570 ret = sowrite(so); in slirp_select_poll()
584 if (so->so_state & SS_ISFCONNECTING) { in slirp_select_poll()
585 ret = socket_recv(so->s, (char *)&ret, 0); in slirp_select_poll()
594 so->so_state = SS_NOFDREF; in slirp_select_poll()
598 ret = socket_send(so->s, &ret, 0); in slirp_select_poll()
605 so->so_state = SS_NOFDREF; in slirp_select_poll()
607 so->so_state &= ~SS_ISFCONNECTING; in slirp_select_poll()
610 tcp_input((struct mbuf *)NULL, sizeof(struct ip),so); in slirp_select_poll()
620 for (so = udb.so_next; so != &udb; so = so_next) { in slirp_select_poll()
621 so_next = so->so_next; in slirp_select_poll()
623 if ((so->so_state & SS_PROXIFIED) != 0) in slirp_select_poll()
626 if (so->s != -1 && FD_ISSET(so->s, readfds)) { in slirp_select_poll()
627 sorecvfrom(so); in slirp_select_poll()
1136 struct socket *so; in _slirp_redir_loop() local
1138 for (so = head->so_next; so != head; so = so->so_next) { in _slirp_redir_loop()
1141 sock_address_init_inet(&local, so->so_laddr_ip, so->so_laddr_port); in _slirp_redir_loop()
1142 sock_address_init_inet(&foreign, so->so_faddr_ip, so->so_faddr_port); in _slirp_redir_loop()
1162 struct socket *so; in slirp_redir_rm() local
1167 for (so = head->so_next; so != head; so = so->so_next) { in slirp_redir_rm()
1168 if (so->so_faddr_port == host_port) { in slirp_redir_rm()
1169 close(so->s); in slirp_redir_rm()
1170 sofree(so); in slirp_redir_rm()
1209 ssize_t slirp_send(struct socket *so, const void *buf, size_t len, int flags) in slirp_send() argument
1211 if (so->s == -1 && so->extra) { in slirp_send()
1212 qemu_chr_write(so->extra, buf, len); in slirp_send()
1216 return send(so->s, buf, len, flags); in slirp_send()
1221 struct socket *so; in slirp_find_ctl_socket() local
1223 for (so = tcb.so_next; so != &tcb; so = so->so_next) { in slirp_find_ctl_socket()
1224 if ((so->so_faddr_ip & 0xffffff00) == in slirp_find_ctl_socket()
1226 && ((so->so_faddr_port & 0xff) == in slirp_find_ctl_socket()
1228 && so->so_faddr_port == guest_port) in slirp_find_ctl_socket()
1229 return so; in slirp_find_ctl_socket()
1238 struct socket *so; in slirp_socket_can_recv() local
1243 so = slirp_find_ctl_socket(addr_low_byte, guest_port); in slirp_socket_can_recv()
1245 if (!so || so->so_state & SS_NOFDREF) in slirp_socket_can_recv()
1248 if (!CONN_CANFRCV(so) || so->so_snd.sb_cc >= (so->so_snd.sb_datalen/2)) in slirp_socket_can_recv()
1251 return sopreprbuf(so, iov, NULL); in slirp_socket_can_recv()
1258 struct socket *so = slirp_find_ctl_socket(addr_low_byte, guest_port); in slirp_socket_recv() local
1260 if (!so) in slirp_socket_recv()
1263 ret = soreadbuf(so, (const char *)buf, size); in slirp_socket_recv()
1266 tcp_output(sototcpcb(so)); in slirp_socket_recv()
1329 static void slirp_socket_save(QEMUFile *f, struct socket *so) in slirp_socket_save() argument
1331 qemu_put_be32(f, so->so_urgc); in slirp_socket_save()
1332 qemu_put_be32(f, so->so_faddr_ip); in slirp_socket_save()
1333 qemu_put_be32(f, so->so_laddr_ip); in slirp_socket_save()
1334 qemu_put_be16(f, so->so_faddr_port); in slirp_socket_save()
1335 qemu_put_be16(f, so->so_laddr_port); in slirp_socket_save()
1336 qemu_put_byte(f, so->so_iptos); in slirp_socket_save()
1337 qemu_put_byte(f, so->so_emu); in slirp_socket_save()
1338 qemu_put_byte(f, so->so_type); in slirp_socket_save()
1339 qemu_put_be32(f, so->so_state); in slirp_socket_save()
1340 slirp_sbuf_save(f, &so->so_rcv); in slirp_socket_save()
1341 slirp_sbuf_save(f, &so->so_snd); in slirp_socket_save()
1342 slirp_tcp_save(f, so->so_tcpcb); in slirp_socket_save()
1351 struct socket *so; in slirp_state_save() local
1352 so = slirp_find_ctl_socket(ex_ptr->ex_addr, ntohs(ex_ptr->ex_fport)); in slirp_state_save()
1353 if (!so) in slirp_state_save()
1357 slirp_socket_save(f, so); in slirp_state_save()
1433 static int slirp_socket_load(QEMUFile *f, struct socket *so) in slirp_socket_load() argument
1435 if (tcp_attach(so) < 0) in slirp_socket_load()
1438 so->so_urgc = qemu_get_be32(f); in slirp_socket_load()
1439 so->so_faddr_ip = qemu_get_be32(f); in slirp_socket_load()
1440 so->so_laddr_ip = qemu_get_be32(f); in slirp_socket_load()
1441 so->so_faddr_port = qemu_get_be16(f); in slirp_socket_load()
1442 so->so_laddr_port = qemu_get_be16(f); in slirp_socket_load()
1443 so->so_iptos = qemu_get_byte(f); in slirp_socket_load()
1444 so->so_emu = qemu_get_byte(f); in slirp_socket_load()
1445 so->so_type = qemu_get_byte(f); in slirp_socket_load()
1446 so->so_state = qemu_get_be32(f); in slirp_socket_load()
1447 if (slirp_sbuf_load(f, &so->so_rcv) < 0) in slirp_socket_load()
1449 if (slirp_sbuf_load(f, &so->so_snd) < 0) in slirp_socket_load()
1451 slirp_tcp_load(f, so->so_tcpcb); in slirp_socket_load()
1463 struct socket *so = socreate(); in slirp_state_load() local
1465 if (!so) in slirp_state_load()
1468 ret = slirp_socket_load(f, so); in slirp_state_load()
1473 if ((so->so_faddr_ip & 0xffffff00) != special_addr_ip) in slirp_state_load()
1478 (so->so_faddr_ip & 0xff) == ex_ptr->ex_addr && in slirp_state_load()
1479 so->so_faddr_port == ex_ptr->ex_fport) in slirp_state_load()
1485 so->extra = (void *)ex_ptr->ex_exec; in slirp_state_load()