+#ifdef SOCKET_AVAIL
+ // socket serial I/O by Alexandre Frey <Alexandre.Frey@trusted-logic.fr>
+ case 'k':
+ {
+ FILE *Ser_in, *Ser_out;
+ int sock;
+ unsigned short serverport;
+ int client_sock;
+
+ if (arg_avail("Ser_in")) {
+ fprintf(stderr, "Serial input specified more than once.\n");
+ }
+ if (arg_avail("Ser_out")) {
+ fprintf(stderr, "Serial output specified more than once.\n");
+ }
+
+ serverport = atoi(optarg);
+ sock = make_server_socket(serverport);
+ if (listen(sock, 1) < 0) {
+ fprintf(stderr, "Listen on port %d: %s\n", serverport,
+ strerror(errno));
+ return (4);
+ }
+ fprintf(stderr, "Listening on port %d for a serial connection.\n",
+ serverport);
+ if ((client_sock = accept(sock, NULL, NULL)) < 0) {
+ fprintf(stderr, "accept: %s\n", strerror(errno));
+ }
+ fprintf(stderr, "Serial connection established.\n");
+
+ if ((Ser_in = fdopen(client_sock, "r")) == NULL) {
+ fprintf(stderr, "Can't create input stream: %s\n", strerror(errno));
+ return (4);
+ }
+ arguments->add(new cl_prg_arg(0, "Ser_in", Ser_in));
+ if ((Ser_out = fdopen(client_sock, "w")) == NULL) {
+ fprintf(stderr, "Can't create output stream: %s\n", strerror(errno));
+ return (4);
+ }
+ arguments->add(new cl_prg_arg(0, "Ser_out", Ser_out));
+ break;
+ }
+#endif
+