ho risolto diversi problemi completando il codice:

server
codice:
#include <sys/types.h>   
#include <sys/socket.h>
        #include <iostream>
        #include <string>
        #include <stdlib.h>
        #include <stdio.h>
        #include <string.h>
        #include <errno.h>
#include <netinet/in.h>

using namespace std;

int main()
{


//creazione socket
int sockid;
if ((sockid=socket(AF_INET,SOCK_STREAM,0))<0) cout<<"errore creazione\n"; else cout<<"socket: "<<sockid<<endl;


//creazione struttura
sockaddr_in servaddr;
bzero((char *) &servaddr, sizeof(servaddr)); //azzeramento
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(5001);
servaddr.sin_addr.s_addr=INADDR_ANY;  //indirizzo qualsiasi

//binding
if (bind(sockid, (struct sockaddr *) &servaddr, sizeof(struct sockaddr))==-1) cout<<"errore di binding "<<(errno)<<endl; else cout<<"binding effettuato\n";

//creo struttura del client
sockaddr_in clientaddr;
int clientid;  //nuovo id del client
unsigned int dimensionid=sizeof(clientaddr); //dimensione della struttura

//ascolto
listen(sockid,1);
cout<<"ascolto effettuato\n";

//accetto
clientid=accept(sockid,(sockaddr *) &clientaddr,&dimensionid); 
if(clientid<0) cout<<"errore di accept\n";else cout<<clientid<<endl;

sleep(5);

}
client:
codice:
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
        #include <iostream>
        #include <string.h>
        #include <stdlib.h>
        #include <stdio.h>
        #include <strings.h>
        #include <errno.h>
#include <netinet/in.h>
#include <netdb.h>
using namespace std;

int main(){

int sockid;
if ((sockid=socket(AF_INET,SOCK_STREAM,0))<0) cout<<"errore creazione\n"; else cout<<"socket: "<<sockid<<endl;

//ottengo l'indirizzo locale del server a partire dal "nome"
hostent *hp;
hp = gethostbyname("192.168.1.109");  //<--indirizzo locale

//creo la struttura per il server
sockaddr_in servaddr;
bzero((char *) &servaddr, sizeof(servaddr)); //azzeramento
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(5001);
bcopy( (char*)hp->h_addr,(char*)&servaddr.sin_addr.s_addr,hp->h_length );

//connetto
if (connect(sockid,(struct sockaddr *) &servaddr,sizeof(servaddr)) < 0) cout<<"errore di connessione\n"; else cout<<"connesso\n";

sleep(5);

}
il fatto è che qui ho usato un indirizzo locale, se invece provo ad usare l'indirizzo ip (preso da quel sito di prima) e mettere i due programmi in macchine collegate a reti diverse la connessione non avviene. Sbaglio forse a scegliere l'indirizzo da passare a gethostbyname() ?