The main loop

With our many helper functions out of the way, we can now finish web_server.c. Remember to first #include chap07.h and also add in all of the types and functions we've defined so far—struct client_info, get_content_type(), create_socket(), get_client(), drop_client(), get_client_address(), wait_on_clients(), send_400(), send_404(), and serve_resource().

We can then begin the main() function. It starts by initializing Winsock on Windows:

/*web_server.c except*/int main() {#if defined(_WIN32)    WSADATA d;    if (WSAStartup(MAKEWORD(2, 2), &d)) {        fprintf(stderr, "Failed to initialize.\n");        return 1;    }#endif

We then use our earlier function, create_socket(), to create the listening socket. Our server listens on port 8080, but feel free ...

Get Hands-On Network Programming with C now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.