提交 6d6e0727 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

The user tramps for socket system calls and a test program.

上级 aab8fae3
......@@ -9,6 +9,8 @@ ifeq ($(HAVE_LWIP),y)
-include $(O)/net/*.d
OBJS += $(O)/liblwip.a
UPROGS += $(O)/_telnetd
CFLAGS += -Ilwip/src/include -Inet -Ilwip/src/include/ipv4 -I. -DLWIP
LWIP_CFLAGS = -fno-pic -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb \
......
......@@ -23,3 +23,7 @@
#define SYS_map 22
#define SYS_unmap 23
#define SYS_halt 24
#define SYS_socket 25
#define SYS_bind 26
#define SYS_listen 27
#define SYS_accept 28
#include "types.h"
#include "user.h"
#include "unet.h"
int
main(void)
{
int s;
int r;
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0)
die("telnetd socket: %d\n", s);
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_port = htons(23);
r = bind(s, (struct sockaddr *)&sin, sizeof(sin));
if (r < 0)
die("telnetd bind: %d\n", r);
r = listen(s, 5);
if (r < 0)
die("telnetd listen: %d\n", r);
for (;;) {
socklen_t socklen = sizeof(sin);
int ss = accept(s, (struct sockaddr *)&sin, &socklen);
if (ss < 0) {
printf(1, "telnetd accept: %d\n", ss);
continue;
}
printf(1, "Got one!\n");
// XXX fork, exec sh, etc..
close(ss);
}
}
#ifdef LWIP
#include "lwip/sockets.h"
// system calls
extern int socket(int domain, int type, int protocol);
extern int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
extern int listen(int sockfd, int backlog);
extern int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
#endif
......@@ -32,3 +32,7 @@ SYSCALL(uptime)
SYSCALL(map)
SYSCALL(unmap)
SYSCALL(halt)
SYSCALL(socket)
SYSCALL(bind)
SYSCALL(listen)
SYSCALL(accept)
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论