#include <sys/socket.h>
#include <sys/un.h>
-#define SOCK_LST 0 /* Listening */
-#define SOCK_SYN 1 /* Connecting */
-#define SOCK_EST 2 /* Established */
-#define SOCK_STL 3 /* Stale, dead */
+#define SOCK_SYN 0 /* Connecting */
+#define SOCK_EST 1 /* Established */
+#define SOCK_STL 2 /* Stale, dead */
#define SOCK_TOS_MINDELAY 4
#define SOCK_TOS_MAXTP 3
#define SOCK_TOS_MAXREL 2
struct socket
{
- struct socket *next, *prev;
int refcount;
- int fd;
- int isrealsocket; /* Bleh... */
- int family;
- int tos;
- int type;
int state;
- int ignread;
- int events;
- int close;
- struct sockaddr *remote;
- socklen_t remotelen;
- struct
- {
- uid_t uid;
- gid_t gid;
- } ucred;
- union
- {
- struct
- {
- struct dgrambuf *f, *l;
- } d;
- struct
- {
- void *buf;
- size_t bufsize;
- size_t datasize;
- } s;
- } outbuf;
+ int block;
+ int dgram;
union
{
struct
size_t bufsize;
size_t datasize;
} s;
- } inbuf;
+ } buf;
void (*conncb)(struct socket *sk, int err, void *data);
void (*errcb)(struct socket *sk, int err, void *data);
void (*readcb)(struct socket *sk, void *data);
void (*writecb)(struct socket *sk, void *data);
- void (*acceptcb)(struct socket *sk, struct socket *newsk, void *data);
+ struct ufd *ufd;
+ void *data;
+};
+
+struct lport {
+ struct ufd *ufd;
+ void (*acceptcb)(struct lport *lp, struct socket *newsk, void *data);
+ void (*errcb)(struct lport *lp, int err, void *data);
+ void (*close)(struct lport *lp);
void *data;
};
void putsock(struct socket *sk);
void getsock(struct socket *sk);
-struct socket *netcslisten(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct socket *, struct socket *, void *), void *data);
-struct socket *netcslistenlocal(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct socket *, struct socket *, void *), void *data);
-struct socket *netcstcplisten(int port, int local, void (*func)(struct socket *, struct socket *, void *), void *data);
+struct lport *netcslisten(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct socket *, struct socket *, void *), void *data);
+struct lport *netcslistenlocal(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct socket *, struct socket *, void *), void *data);
+struct lport *netcstcplisten(int port, int local, void (*func)(struct socket *, struct socket *, void *), void *data);
struct socket *netcsconn(struct sockaddr *addr, socklen_t addrlen, void (*func)(struct socket *, int, void *), void *data);
int pollsocks(int timeout);
void sockqueue(struct socket *sk, void *data, size_t size);
size_t sockqueuesize(struct socket *sk);
int netresolve(char *addr, void (*callback)(struct sockaddr *addr, int addrlen, void *data), void *data);
struct socket *netcsdgram(struct sockaddr *name, socklen_t namelen);
-struct socket *netdupsock(struct socket *sk);
-void netdgramconn(struct socket *sk, struct sockaddr *addr, socklen_t addrlen);
+struct socket *netdgramconn(struct socket *sk, struct sockaddr *addr, socklen_t addrlen);
int sockgetlocalname(struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf);
int sockgetremotename(struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf);
int sockgetremotename2(struct socket *sk, struct socket *sk2, struct sockaddr **namebuf, socklen_t *lenbuf);
+int getremotename(struct lport *lp, struct sockaddr **namebuf, socklen_t *lenbuf);
+int getremotename2(struct lport *lp, struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf);
void closesock(struct socket *sk);
+void closelport(struct lport *lp);
void *sockgetinbuf(struct socket *sk, size_t *size);
struct socket *wrapsock(int fd);
size_t sockgetdatalen(struct socket *sk);
-int getpublicaddr(int af, struct sockaddr **addr, socklen_t *lenbuf);
int socksettos(struct socket *sk, int tos);
int addreq(struct sockaddr *x, struct sockaddr *y);
char *formataddress(struct sockaddr *arg, socklen_t arglen);
+char *formatsockpeer(struct socket *sk);
void sockpushdata(struct socket *sk, void *buf, size_t size);
+void sockblock(struct socket *sk, int block);
+int sockpeeraddr(struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf);
+int getucred(struct socket *sk, uid_t *uid, gid_t *gid);
+int sockfamily(struct socket *sk);
#endif