1

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?

Johnis
  • 11
  • 1

4 Answers4

3

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

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

jldupont
  • 93,734
  • 56
  • 203
  • 318
2

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.

Nikolai Fetissov
  • 82,306
  • 11
  • 110
  • 171
1

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.

JSBձոգչ
  • 40,684
  • 18
  • 101
  • 169
1

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.

x4u
  • 13,877
  • 6
  • 48
  • 58