"...si ese mismo codigo lo compilo en windows debe funcionar sin ningun problema..."
Excepto que para windows debes iniciar la dll de winsocks para ese proceso, y al finalizar debes notificar que has terminado de usarlo (el sistema decidirá si finaliza la dll o si hay algun otro proceso usandola):
Código C:
Ver originalWSADATA wsa;
if(WSAStartup(MAKEWORD(2, 0), &wsa)) {
//se produjo un error
}
//ya puedes trabajar con sockets
...
//finalizas wsa
WSACleanup();
Para lo demas la libreria de winsock2 tiene un set de funciones extendidas que difieren un poco de la libreria de sockets, asimismo las notificaciones asincronas de eventos de red son diferentes.
Tienes que buscar algun manual o la referencia de winsock y winsock2; la guia beej tambien te será de ayuda.
Suerte con eso
Saludos
vosk