Johnis
Johnis

Reputation: 11

Dealing with similar code in multiple C "projects"

I am playing around with some C code, writing a small webserver. The purpose of what I am doing is to write the server using different networking techniques so that I can learn more about them (multithread vs multiprocess vs select vs poll). Much of the code stays the same, but I would like the networking code to be able to be "swapped out" to do some performance testing against the different techniques. I thought about using ifdefs but that seems like it will quickly ugly up the code. Any suggestions?

Upvotes: 1

Views: 171

Answers (4)

x4u
x4u

Reputation: 14077

Put the different implementations of the networking related functions into different .c files sharing a common header and than link with the one you want to use. Starting from this you can make your makefile create x different executables this way for each of the different implementations you have done, so you can just say "make httpd_select" or "make httpd_poll" etc.

Especially for benchmarking to find the best approach it will probably give you more reliable results to do it at the compiler/linker level than via shared libraries or function pointers as that might introduce extra overhead at runtime.

Upvotes: 1

Nikolai Fetissov
Nikolai Fetissov

Reputation: 84169

I prefer pushing "conditional compilation" from C/C++ source to makefiles, i.e. having same symbols produced from multiple .c/.cpp files but only link in the objects selected by the build option.

Also take a look at nginx if you haven't already - might give you some ideas about web server implementation.

Upvotes: 2

jldupont
jldupont

Reputation: 96716

Dynamic library loading? e.g. dlopen in Linux.

Just craft an API common to the component that requires dynamic loading.

Upvotes: 3

JSBձոգչ
JSBձոգչ

Reputation: 41378

Compile the networking part into its own lib with a flexible interface. Compile that lib as needed into the various wrappers. You may even be able to find a preexisting lib that meets your requirements.

Upvotes: 1

Related Questions