CPallini has given you the correct answer. But I see this mistake a lot with novice programmers. The linker is complaining because (as it says) you have two instances of SomeSocket. Before the compiler attacks you "one.c" file, a preprocessor attacks it, and processes the includes. An easy exercise for you: remove the #include from one.c, and cut and paste the whole of one.h into the top of one.c. Do this for two.c. Now have a lightbulb moment as you realise what the linker is telling you. Iain.