int main(int argc, char** argv)
{
- (void)argc;
- (void)argv;
+ if (argc < 2)
+ {
+ fprintf(stderr, "usage: dial DIALSTR [CMD [ARG...]]\n");
+ return 1;
+ }
+
+ int fd = netdial(argv[1]);
+ if (argc > 2)
+ {
+ /* execute command with socket as stdio */
+ }
+ else
+ {
+ /* copy data to/from stdio */
+ }
+ close(fd);
+
return 0;
}
\ No newline at end of file
int netannounce(char* dialstr);
int netlisten(int fd, int backlog);
int netaccept(int fd);
+int netdial(char* dialstr);
+int enetdial(char* dialstr);
#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;
+int netdial(char* dialstr)
+{
+ int rv = -1;
+ struct socket_t sock = { .fd = -1 };
+ if (netsocket(dialstr, &sock))
+ {
+ switch (sock.addr.in.sin_family)
+ {
+ case AF_INET:
+ rv = connect(sock.fd, (struct sockaddr*)&sock.addr.in, sizeof(sock.addr.in));
+ break;
+
+ case AF_UNIX:
+ rv = connect(sock.fd, (struct sockaddr*)&sock.addr.un, sizeof(sock.addr.un));
+ break;
+ }
+ }
+ return (rv == 0 ? sock.fd : rv);
+}
+
+int enetdial(char* dialstr)
+{
+ int fd = -1;
+ if (netdial(dialstr) < 0)
+ {
+ fatal("netdial():");
+ }
+ return fd;
+}