|
|
1.1 root 1: /*
2: * socket emulation routines
3: * pretty much 4.2 sys/uipc_socket2.c
4: */
5: #include "tcp.h"
6: #if NTCP > 0
7:
8: #include "../h/param.h"
9: #include "../h/systm.h"
10: #include "../h/stream.h"
11: #include "../h/inet/in.h"
12: #include "../h/inet/mbuf.h"
13: #include "../h/inet/tcp.h"
14: #include "../h/inet/tcp_timer.h"
15: #include "../h/inet/socket.h"
16: #include "../h/inet/tcp_var.h"
17:
18: extern struct tcpcb tcpcb[];
19: extern struct socket tcpsock[];
20: extern int Ntcp;
21:
22: /*
23: * Sequence from originating side is open /dev/tcp??, write
24: * struct tcpuser (see tcp_device.c), the soisconnecting(),
25: * soisconnected(), soisdisconnecting(), soisdisconnected().
26: * On listening side, sonewconn(so) is called when a connection
27: * is made to socket so, then soisconnected(), at which point the
28: * user is notified and should open the new /dev/tcp??.
29: */
30:
31: soisconnecting(so)
32: register struct socket *so;
33: {
34: so->so_state |= SS_ACTIVE;
35: /* no need to wake up user */
36: }
37:
38: soisconnected(so)
39: register struct socket *so;
40: {
41: tcp_isconnected(so); /* tell user */
42: }
43:
44: soisdisconnecting(so)
45: register struct socket *so;
46: {
47: so->so_state &= ~SS_PLEASEOPEN;
48: tcp_hungup(so); /* sends M_HANGUP */
49: }
50:
51: soisdisconnected(so)
52: register struct socket *so;
53: {
54: so->so_state &= ~(SS_ACTIVE|SS_PLEASEOPEN|SS_RCVATMARK);
55: if(so->so_state&SS_OPEN && !(so->so_state&SS_HUNGUP)) {
56: so->so_state |= SS_HUNGUP;
57: tcp_hungup(so);
58: }
59: }
60:
61: struct socket *
62: sonewconn(head)
63: register struct socket *head;
64: {
65: register struct socket *so;
66: extern struct socket *tcp_newconn();
67:
68: so = tcp_newconn(head);
69: if(so == 0)
70: goto bad;
71: if(tcp_attach(so))
72: goto bad;
73:
74: so->so_options = head->so_options & ~SO_ACCEPTCONN;
75: so->so_state = SS_ACTIVE|SS_PLEASEOPEN;
76: /* simulate PRU_ATTACH */
77: return(so);
78: bad:
79: printf("sonewconn bad\n");
80: return(0);
81: }
82:
83: soabort(so)
84: register struct socket *so;
85: {
86: if(so->so_tcpcb)
87: tcp_drop(so->so_tcpcb);
88: }
89:
90: socantrcvmore(so)
91: struct socket *so;
92: {
93: tcp_cantrcvmore(so);
94: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.