Ho scoperto da poco che il socket di default (almeno sotto unix) è bloccante, sto cercando di risolvere il problema con
codice:
fcntl(sd,F_SETFL,O_NONBLOCK);
senza risultati positivi.

Senza stare a postare tutto il codice vi riassumo il tutto:

creo il socket sd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
lo rendo non bloccante con l'istruzione sopracitata e mi connetto ad un server.

Dopodiché invio e ricevo un messaggio con send() e recv(). Tutto liscio: mando e ricevo il messaggio di risposta dal server.

A questo punto, avendo reso il socket non bloccante, dovrei essere in grado di mandare e ricevere altri messaggi, invece nulla.

Al secondo recv() che faccio, l'int di recv() mi restituisce 0, segno che la connessione dall'altro lato (server) è chiusa.


Un aiutino?
PS: programmo sotto linux