2 /* gcc -O2 -g -pedantic -Wall fgfsclient.c -o fgfsclient */
3 /* USAGE: ./fgfsclient [hostname [port]] */
11 #include <sys/types.h>
12 #include <sys/socket.h>
14 #include <netinet/in.h>
19 #define DFLTHOST "localhost"
22 #define fgfsclose close
25 void init_sockaddr(struct sockaddr_in *name, const char *hostname, unsigned port);
26 int fgfswrite(int sock, char *msg, ...);
27 const char *fgfsread(int sock, int wait);
28 void fgfsflush(int sock);
32 int fgfswrite(int sock, char *msg, ...)
39 vsnprintf(buf, MAXMSG - 2, msg, va);
41 printf("SEND: \t<%s>\n", buf);
42 strcat(buf, "\015\012");
44 len = write(sock, buf, strlen(buf));
54 const char *fgfsread(int sock, int timeout)
56 static char buf[MAXMSG];
66 if (!select(32, &ready, 0, 0, &tv))
69 len = read(sock, buf, MAXMSG - 1);
77 for (p = &buf[len - 1]; p >= buf; p--)
78 if (*p != '\015' && *p != '\012')
81 return strlen(buf) ? buf : NULL;
86 void fgfsflush(int sock)
89 while ((p = fgfsread(sock, 0)) != NULL) {
90 printf("IGNORE: \t<%s>\n", p);
96 int fgfsconnect(const char *hostname, const int port)
98 struct sockaddr_in serv_addr;
99 struct hostent *hostinfo;
102 sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
104 perror("fgfsconnect/socket");
108 hostinfo = gethostbyname(hostname);
109 if (hostinfo == NULL) {
110 fprintf(stderr, "fgfsconnect: unknown host: \"%s\"\n", hostname);
115 serv_addr.sin_family = AF_INET;
116 serv_addr.sin_port = htons(port);
117 serv_addr.sin_addr = *(struct in_addr *)hostinfo->h_addr;
119 if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
120 perror("fgfsconnect/connect");
129 int main(int argc, char **argv)
133 const char *hostname, *p;
135 hostname = argc > 1 ? argv[1] : DFLTHOST;
136 port = argc > 2 ? atoi(argv[2]) : DFLTPORT;
138 sock = fgfsconnect(hostname, port);
142 fgfswrite(sock, "data");
143 fgfswrite(sock, "set /controls/engines/engine[%d]/throttle %d", 0, 1);
144 fgfswrite(sock, "get /sim/aircraft");
145 p = fgfsread(sock, 3);
147 printf("READ: \t<%s>\n", p);
148 fgfswrite(sock, "quit");