#include <sys/socket.h>
+#include <utils.h>
+
#define SOCK_LST 0 /* Listening */
#define SOCK_SYN 1 /* Connecting */
#define SOCK_EST 2 /* Established */
#define SOCK_STL 3 /* Stale, dead */
-#define SOCK_TOS_MINDELAY 0x10
-#define SOCK_TOS_MAXTP 0x08
-#define SOCK_TOS_MAXREL 0x04
-#define SOCK_TOS_MINCOST 0x02
+#define SOCK_TOS_MINDELAY 4
+#define SOCK_TOS_MAXTP 3
+#define SOCK_TOS_MAXREL 2
+#define SOCK_TOS_MINCOST 1
struct dgrambuf
{
size_t datasize;
} s;
} inbuf;
+ /*
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);
void *data;
+ */
+ CBCHAIN(socket_conn, struct socket *sk, int err);
+ CBCHAIN(socket_err, struct socket *sk, int err);
+ CBCHAIN(socket_read, struct socket *sk);
+ CBCHAIN(socket_write, struct socket *sk);
+ CBCHAIN(socket_accept, struct socket *sk, struct socket *newsk);
};
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 *netcsconn(struct sockaddr *addr, socklen_t addrlen, void (*func)(struct socket *, int, void *), void *data);
+struct socket *netcslisten(int type, struct sockaddr *name, socklen_t namelen, int (*func)(struct socket *, struct socket *, void *), void *data);
+struct socket *netcslistenlocal(int type, struct sockaddr *name, socklen_t namelen, int (*func)(struct socket *, struct socket *, void *), void *data);
+struct socket *netcstcplisten(int port, int local, int (*func)(struct socket *, struct socket *, void *), void *data);
+struct socket *netcsconn(struct sockaddr *addr, socklen_t addrlen, int (*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);
void 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);
void closesock(struct socket *sk);
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);
void sockpushdata(struct socket *sk, void *buf, size_t size);