// -*- c -*-
//
// These are calls that are invoked via the socketcall mechanism
// Note that on most architectures this is simply #included into
// SYSCALLS.def.
//
<?> int socket(int, int, int);
<?> int bind(int, struct sockaddr *, int);
<?> int connect(int, struct sockaddr *, socklen_t);
<?> int listen(int, int);
<?> int accept(int, struct sockaddr *, socklen_t *);
<?> int getsockname(int, struct sockaddr *, socklen_t *);
<?> int getpeername(int, struct sockaddr *, socklen_t *);
<?> int socketpair(int, int, int, int *);
<?> int sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t);
<?> int recvfrom(int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *);
<?> int shutdown(int, int);
<?> int setsockopt(int, int, int, const void *, socklen_t);
<?> int getsockopt(int, int, int, void *, socklen_t *);
<?> int sendmsg(int, const struct msghdr *, unsigned int);
<?> int recvmsg(int, struct msghdr *, unsigned int);
