Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

typedef struct Rock Rock;

enum
{
        Ctlsize=        128,

        /* states */
        Sopen=  0,
        Sbound,
        Sconnected,

        /* types of name */
        Tsys=   0,
        Tip,
        Tdom,
};

/*
 *  since BSD programs expect to perform both control and data functions
 *  through a single fd, we need to hide enough info under a rock to
 *  be able to open the control file when we need it.
 */
struct Rock
{
        Rock            *next;
        unsigned long   dev;            /* inode & dev of data file */
        unsigned long   inode;          /* ... */
        int             domain;         /* from socket call */
        int             stype;          /* ... */
        int             protocol;       /* ... */
        struct sockaddr addr;           /* address from bind */
        int             reserved;       /* use a priveledged port # (< 1024) */
        struct sockaddr raddr;          /* peer address */
        char            ctl[Ctlsize];   /* name of control file (if any) */
        int             other;          /* fd of the remote end for Unix domain */
};

extern Rock*    _sock_findrock(int, struct stat*);
extern Rock*    _sock_newrock(int);
extern void     _sock_srvname(char*, char*);
extern int      _sock_srv(char*, int);
extern int      _sock_data(int, char*, int, int, int, Rock**);
extern int      _sock_ipattr(char*);
extern void     _sock_ingetaddr(Rock*, struct sockaddr_in*, int*, char*);

extern void     _syserrno(void);