I think the whole challenge of that part is redefinition correct?
Since we have no code to study, we have to assume from your description that you have declared global variable in socket.h. If by "redefinition" you are referring to the fact that the linker may complain about multiple copies of such global variables, you're correct. The "extern" keyword may be useful, and to move the definition of those globals into a single translation unit (c file).

Otherwise, the ability to include any "h" file is generally the notion that such a file does not cause the linker to complain about duplicates, and that the h file deals with including what it requires from the libraries it consumes.

An interface is more in the line of a computer science idea, applicable to nearly any language. An example of a C interface can be found in several of the libraries. The commonly used family of functions fopen/fread/fwrite/fclose (and related) constitute an interface that can be used by any program by merely including the appropriate header files from the library, and linking with the required C run time as configured and required.