Aca les dejo un ejemplo para ir empesando con sockets.:
#include <stdio.h>
#include <Winsock2.h>
int main (void) {
/** inicializamos Winsock.
(Es necesario hacer esto antes de empesar a usar funciones como socket connect etc.) */
WSADATA WSAdata;
WSAStartup(MAKEWORD(2, 2), &WSAdata);
/** SOCKET = typedef unsigned int
en MySocket se guardara el descriptor para nuestra socket. */
SOCKET MySocket;
/** Usaremos la estructura SOCKADDR_IN para guardar parametros de nuestra coneccion como la ip y el puerto. */
SOCKADDR_IN SockAddr;
IN_ADDR iaddr;
/** Especificamos a la familia a la cual la socket va a pertenecer. */
SockAddr.sin_family = AF_INET;
/** Especificamos donde la socket se va a conectar pero primero pasamos de dotted ip a network byte order,
lo cargamos en la estructura iaddr y dps en SockAddr */
iaddr.S_un.S_addr = inet_addr("64.233.187.104"); /* 64.233.187.104 = www.gooogle.com */
SockAddr.sin_addr = iaddr;
/** Convertimos el puerto a donde nos queremos conectar de int a network byte order y lo cargamos en la struct */
SockAddr.sin_port = htons(80);
/** Creamos una socket y guardamos el file descriptor ( o handle) en mysock. */
MySocket = socket(AF_INET,SOCK_STREAM,0);
/** Tratamos de conectarnos ... */
int ret = connect(MySocket,(/*typedef sockaddr*/PSOCKADDR)&SockAddr,sizeof(SockAddr));
/** Cerramos el socket. */
closesocket(MySocket);
/** si imprime 0 la conneccion se concreto sin ningun error. */
printf("el valor revuelto es: %i\n", ret);
/* finalizamos el uso de winsock. */
WSACleanup();
return 1;
}