2 /* gcc -O2 -g -pedantic -Wall fgfsclient.c -o fgfsclient */
10 #include <sys/types.h>
11 #include <sys/socket.h>
13 #include <netinet/in.h>
18 #define DFLTHOST "localhost"
21 #define fgfsclose close
24 void init_sockaddr(struct sockaddr_in *name, const char *hostname, unsigned port);
25 int fgfswrite(int sock, char *msg, ...);
26 const char *fgfsread(int sock, int wait);
27 void fgfsflush(int sock);
31 int fgfswrite(int sock, char *msg, ...)
38 vsprintf(buf, msg, va);
40 printf("SEND: \t<%s>\n", buf);
41 strcat(buf, "\015\012");
43 len = write(sock, buf, strlen(buf));
53 const char *fgfsread(int sock, int timeout)
55 static char buf[MAXMSG];
65 if (!select(32, &ready, 0, 0, &tv))
68 len = read(sock, buf, MAXMSG - 1);
76 for (p = &buf[len - 1]; p >= buf; p--)
77 if (*p != '\015' && *p != '\012')
80 return strlen(buf) ? buf : NULL;
85 void fgfsflush(int sock)
88 while ((p = fgfsread(sock, 0)) != NULL) {
89 printf("IGNORE: \t<%s>\n", p);
95 int fgfsconnect(const char *hostname, const int port)
97 struct sockaddr_in serv_addr;
98 struct hostent *hostinfo;
101 sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
103 perror("fgfsconnect/socket");
107 hostinfo = gethostbyname(hostname);
108 if (hostinfo == NULL) {
109 fprintf(stderr, "fgfsconnect: unknown host: \"%s\"\n", hostname);
114 serv_addr.sin_family = AF_INET;
115 serv_addr.sin_port = htons(port);
116 serv_addr.sin_addr = *(struct in_addr *)hostinfo->h_addr;
118 if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
119 perror("fgfsconnect/connect");
128 int main(int argc, char **argv)
132 const char *hostname, *p;
134 hostname = argc > 1 ? argv[1] : DFLTHOST;
135 port = argc > 2 ? atoi(argv[2]) : DFLTPORT;
137 sock = fgfsconnect(hostname, port);
139 return (EXIT_FAILURE);
141 fgfswrite(sock, "data");
142 fgfswrite(sock, "set /controls/engines/engine[%d]/throttle %d", 0, 1);
143 fgfswrite(sock, "get /sim/aircraft");
144 p = fgfsread(sock, 3);
146 printf("READ: \t<%s>\n", p);
147 fgfswrite(sock, "quit");