Salut,
alors pour ce qui est d une doc sur les sockets y en a une que je trouve bien sur le site :
http://www.ecst.csuchico.edu/~beej/guide/net/
Sinon en ce qui concerne le timeout, moi je programme mes sockects en asynchrone ie recv ne bloque pas en attendant de recevoir des données.
Exemple :
int res;
fd_set fdset_recv;
timeval attendre = {0, 600000}; // {sec, nSec}
FD_ZERO(&fdset_recv);
FD_SET(sock, &fdset_recv);
// On attend pdt 60 msec pr voir si des infos sont en attente de lecture sur le SOCKET. Ca agit comme un sleep, la main est rendue aux autres threads
res = select(FD_SETSIZE, &fdset_recv, NULL, NULL, &attendre);
// Si oui
if(res > 0)
{
// On fait le recvfrom ici car des données demandent à etre lues
int sinsize = sizeof(sin);
bytes_read = recvfrom(sock, buffer, sizeof(buffer), 0, (SOCKADDR*)&sin, &sinsize);
}
else return;
cf la doc sur select