Chapter 9. The COMSTACK Module
Prev |  | Next

# Chapter 9. The COMSTACK Module

## 1. Synopsis (blocking mode)

        COMSTACK stack;
        char *buf = 0;
        int size = 0, length_incoming;
        char server_address_str[] = "localhost:9999";
        void *server_address_ip;
        int status;

        char *protocol_package = "GET / HTTP/1.0\r\n\r\n";
        int protocol_package_length = strlen(protocol_package);

        stack = cs_create(tcpip_type, 1, PROTO_HTTP);
        if (!stack) {
            perror("cs_create");  /* use perror() here since we have no stack yet */
            return -1;
        }

        server_address_ip = cs_straddr(stack, server_address_str);
        if (!server_address_ip) {
            fprintf(stderr, "cs_straddr: address could not be resolved\n");
            return -1;
        }

        status = cs_connect(stack, server_address_ip);
        if (status) {
            fprintf(stderr, "cs_connect: %s\n", cs_strerror(stack));
            return -1;
        }

        status = cs_rcvconnect(stack);
        if (status) {
            fprintf(stderr, "cs_rcvconnect: %s\n", cs_strerror(stack));
            return -1;
        }

        status = cs_put(stack, protocol_package, protocol_package_length);
        if (status) {
            fprintf(stderr, "cs_put: %s\n", cs_strerror(stack));
            return -1;
        }

        /* Now get a response */
        length_incoming = cs_get(stack, &buf, &size);
        if (!length_incoming) {
            fprintf(stderr, "Connection closed\n");
            return -1;
        } else if (length_incoming < 0) {
            fprintf(stderr, "cs_get: %s\n", cs_strerror(stack));
            return -1;
        }

        /* Print result */
        fwrite(buf, length_incoming, 1, stdout);

        /* clean up */
        cs_close(stack);
        if (buf)
            xfree(buf);
        return 0;

Prev |  | Next
4. Debugging | Home | 2. Introduction