Linux socket programming in C is 99% the same as in Windows, don't use any of the functions starting with WSA (you wont need WSAstartup, WSAsocket etc), your basic functions will be exactly the same :
socket
accept
bind
recv
send
sendto
gethostbyname
etc
etc
The packet structures are also still the same
sockaddr_in
in_addr
hostent
etc
etc
As far as the header files go, you'll want to include
#include <sys\socket.h>
#include <netinet\in.h>
#include <netdb.h>
Just grab yourself the code for any small client-server application and you'll understand instantly.
Since you're talking about crafting your own packets you will have to use SOCK_RAW when you declare the socket. Then you will have to create structures for the IP header and TCP header and fill these up with the values you want.
If you need more help, let me know I will post sample code for you to get started.
Hmmm socket programming 101
Cheers,