2 AcessOS Test Network Application
\r
4 #include <acess/sys.h>
\r
10 // === PROTOTYPES ===
\r
11 int main(int argc, char *argv[], char *envp[]);
\r
12 int OpenTCP(const char *AddressString, short PortNumber);
\r
15 int main(int argc, char *argv[], char *envp[])
\r
18 int client_running = 1;
\r
20 // Connect to the remove server
\r
21 server_fd = OpenTCP( argv[1], atoi(argv[2]) );
\r
22 if( server_fd == -1 ) {
\r
23 fprintf(stderr, "Unable to create socket\n");
\r
27 while( client_running )
\r
31 char buffer[BUFSIZ];
\r
34 FD_ZERO(&fds); FD_ZERO(&err_fds);
\r
35 FD_SET(0, &fds); FD_SET(0, &err_fds);
\r
36 FD_SET(server_fd, &fds); FD_SET(server_fd, &err_fds);
\r
38 rv = select(server_fd+1, &fds, NULL, &err_fds, NULL);
\r
41 if( FD_ISSET(server_fd, &fds) )
\r
43 // Read from server, and write to stdout
\r
46 len = read(server_fd, BUFSIZ, buffer);
\r
47 write(1, len, buffer);
\r
48 } while( len == BUFSIZ );
\r
51 if( FD_ISSET(0, &fds) )
\r
53 // Read from stdin, and write to server
\r
56 len = read(0, BUFSIZ, buffer);
\r
57 write(server_fd, len, buffer);
\r
58 write(1, len, buffer);
\r
59 } while( len == BUFSIZ );
\r
62 if( FD_ISSET(server_fd, &err_fds) )
\r
73 * \brief Initialise a TCP connection to \a AddressString on port \a PortNumber
\r
75 int OpenTCP(const char *AddressString, short PortNumber)
\r
82 addrType = Net_ParseAddress(AddressString, addrBuffer);
\r
83 if( addrType == 0 ) {
\r
84 fprintf(stderr, "Unable to parse '%s' as an IP address\n", AddressString);
\r
88 // Finds the interface for the destination address
\r
89 iface = Net_GetInterface(addrType, addrBuffer);
\r
90 if( iface == NULL ) {
\r
91 fprintf(stderr, "Unable to find a route to '%s'\n", AddressString);
\r
95 printf("iface = '%s'\n", iface);
\r
97 // Open client socket
\r
98 // TODO: Move this out to libnet?
\r
100 int len = snprintf(NULL, 100, "/Devices/ip/%s/tcpc", iface);
\r
102 snprintf(path, 100, "/Devices/ip/%s/tcpc", iface);
\r
103 fd = open(path, OPENFLAG_READ|OPENFLAG_WRITE);
\r
109 fprintf(stderr, "Unable to open TCP Client for reading\n");
\r
113 // Set remote port and address
\r
114 printf("Setting port and remote address\n");
\r
115 ioctl(fd, 5, &PortNumber);
\r
116 ioctl(fd, 6, addrBuffer);
\r
119 printf("Initiating connection\n");
\r
120 if( ioctl(fd, 7, NULL) == 0 ) {
\r
121 // Shouldn't happen :(
\r
122 fprintf(stderr, "Unable to start connection\n");
\r
126 // Return descriptor
\r