void serve(int cfd, char** argv)
{
- switch (fork())
+ int pid = fork();
+ if (pid < 0)
{
- case -1:
- perror("fork");
- break;
- case 0:
- dup2(cfd, 0); dup2(cfd, 1); dup2(cfd, 2);
- exit(execvp(argv[0], argv));
- break;
- default:
- break;
+ perror("fork");
+ }
+ else if (pid == 0)
+ {
+ dup2(cfd, 0);
+ dup2(cfd, 1);
+ dup2(cfd, 2);
+ exit(execvp(argv[0], argv));
}
close(cfd);
}
--- /dev/null
+#include <liba.h>
+#include <libnet.h>
+
+//int netdial(char* dialstr)
+//{
+// struct socket_t sock = { .fd = -1 };
+// if (netsocket(dialstr, &sock))
+// {
+// int rv = -1;
+// switch (sock.addr.in.sin_family)
+// {
+// case AF_INET:
+// rv = bind(sock.fd, (struct sockaddr*)&sock.addr.in, sizeof(sock.addr.in));
+// break;
+//
+// case AF_UNIX:
+// if (connect(sock.fd, (struct sockaddr*)&sock.addr.un, sizeof(sock.addr.un)) < 0)
+// {
+// unlink(sock.addr.un.sun_path);
+// rv = bind(sock.fd, (struct sockaddr*)&sock.addr.un, sizeof(sock.addr.un));
+// }
+// break;