Statistics
| Branch: | Revision:

root / slirp / socket.h @ f0cbd3ec

History | View | Annotate | Download (3.5 kB)

1
/*
2
 * Copyright (c) 1995 Danny Gasparovski.
3
 * 
4
 * Please read the file COPYRIGHT for the 
5
 * terms and conditions of the copyright.
6
 */
7

    
8
/* MINE */
9

    
10
#ifndef _SLIRP_SOCKET_H_
11
#define _SLIRP_SOCKET_H_
12

    
13
#define SO_EXPIRE 240000
14
#define SO_EXPIREFAST 10000
15

    
16
/*
17
 * Our socket structure
18
 */
19

    
20
struct socket {
21
  struct socket *so_next,*so_prev;      /* For a linked list of sockets */
22

    
23
  int s;                           /* The actual socket */
24

    
25
                        /* XXX union these with not-yet-used sbuf params */
26
  struct mbuf *so_m;                   /* Pointer to the original SYN packet,
27
                                    * for non-blocking connect()'s, and
28
                                    * PING reply's */
29
  struct tcpiphdr *so_ti;           /* Pointer to the original ti within
30
                                    * so_mconn, for non-blocking connections */
31
  int so_urgc;
32
  struct in_addr so_faddr;           /* foreign host table entry */
33
  struct in_addr so_laddr;           /* local host table entry */
34
  u_int16_t so_fport;                   /* foreign port */
35
  u_int16_t so_lport;                   /* local port */
36
  
37
  u_int8_t        so_iptos;        /* Type of service */
38
  u_int8_t        so_emu;                /* Is the socket emulated? */
39
  
40
  u_char        so_type;                /* Type of socket, UDP or TCP */
41
  int        so_state;                /* internal state flags SS_*, below */
42
  
43
  struct         tcpcb *so_tcpcb;        /* pointer to TCP protocol control block */
44
  u_int        so_expire;                /* When the socket will expire */
45
  
46
  int        so_queued;                /* Number of packets queued from this socket */
47
  int        so_nqueued;                /* Number of packets queued in a row
48
                                 * Used to determine when to "downgrade" a session
49
                                         * from fastq to batchq */
50
        
51
  struct sbuf so_rcv;                /* Receive buffer */
52
  struct sbuf so_snd;                /* Send buffer */
53
  void * extra;                        /* Extra pointer */
54
};
55

    
56

    
57
/*
58
 * Socket state bits. (peer means the host on the Internet,
59
 * local host means the host on the other end of the modem)
60
 */
61
#define SS_NOFDREF                0x001        /* No fd reference */
62

    
63
#define SS_ISFCONNECTING        0x002        /* Socket is connecting to peer (non-blocking connect()'s) */
64
#define SS_ISFCONNECTED                0x004        /* Socket is connected to peer */
65
#define SS_FCANTRCVMORE                0x008        /* Socket can't receive more from peer (for half-closes) */
66
#define SS_FCANTSENDMORE        0x010        /* Socket can't send more to peer (for half-closes) */
67
/* #define SS_ISFDISCONNECTED        0x020*/        /* Socket has disconnected from peer, in 2MSL state */
68
#define SS_FWDRAIN                0x040        /* We received a FIN, drain data and set SS_FCANTSENDMORE */
69

    
70
#define SS_CTL                        0x080
71
#define SS_FACCEPTCONN                0x100        /* Socket is accepting connections from a host on the internet */
72
#define SS_FACCEPTONCE                0x200        /* If set, the SS_FACCEPTCONN socket will die after one accept */
73

    
74
extern struct socket tcb;
75

    
76

    
77
#if defined(DECLARE_IOVEC) && !defined(HAVE_READV)
78
struct iovec {
79
        char *iov_base;
80
        size_t iov_len;
81
};
82
#endif
83

    
84
void so_init _P((void));
85
struct socket * solookup _P((struct socket *, struct in_addr, u_int, struct in_addr, u_int));
86
struct socket * socreate _P((void));
87
void sofree _P((struct socket *));
88
int soread _P((struct socket *));
89
void sorecvoob _P((struct socket *));
90
int sosendoob _P((struct socket *));
91
int sowrite _P((struct socket *));
92
void sorecvfrom _P((struct socket *));
93
int sosendto _P((struct socket *, struct mbuf *));
94
struct socket * solisten _P((u_int, u_int32_t, u_int, int));
95
void sorwakeup _P((struct socket *));
96
void sowwakeup _P((struct socket *));
97
void soisfconnecting _P((register struct socket *));
98
void soisfconnected _P((register struct socket *));
99
void sofcantrcvmore _P((struct  socket *));
100
void sofcantsendmore _P((struct socket *));
101
void soisfdisconnected _P((struct socket *));
102
void sofwdrain _P((struct socket *));
103

    
104
#endif /* _SOCKET_H_ */