1) en cuanto a tu duda inicial:
Código
switch(getpeername(sockfd, &sockbuf, &stsize)) { case 0: break; case ENOTCONN: //...
la funcion getpeername() devuelve 0 en caso de que vaya bien, y -1 en caso de error, y es entonces cuando le da un valor a errno que es el que tu tienes que comprobar. el codigo seria algo asi:
Código
aux=getpeername(sockfd, &sockbuf, &stsize); //reconectando socket... etc
2) veo muchas reservas de memoria pero ningun free(). aunque lo normal es que los so modernos se encarguen de liberarla al finalizar el programa, nunca esta de mas ponerlo por si las moscas y para evitar posibles quebraderos de cabeza. te dejo un enlace corto que habla sobre ello:
http://cboard.cprogramming.com/cplusplus-programming/76877-general-malloc-question.html
3) cuando declaras el array de structs:
Código
lo haces como un puntero, pero luego accedes a ellos de esta manera:
Código
p[j].thread = j;
no deberias acceder a los campos del struct asi:
Código
*(p[j]).thread=j;
o lo que es lo mismo, asi:
Código
p[j]->thread=j;
en lugar de como tu lo haces? tenia entendido que hacerlo como tu lo haces era solo para un struct estatico. quizas he dicho una burrada, pero me refiero a que pensaba que era para una variable que la declaras asi (lo de estatico no se si esta bien dicho):
Código
struct params p;
y no como un puntero. te funciona bien? si es asi ya lo se para la proxima vez. aunque entonces no se que utilidad tiene el operador '->'.
4) es un codigo que aunque no sea demasiado largo es bastante denso. tu eres quien lo ha codeado y quizas no tengas problemas, pero para quien quiera leerlo e intentar entenderlo cuesta bastante. unos cuantos espaciados y algun que otro comentario ayudarian bastante, y tambien te ayudarian a ti en caso de que dentro de unos meses quieras volver a mirarte el codigo.
5) si no te es mucha molestia podrias colgar el codigo cuando lo acabes ya que a mas de uno le vendra bien para aprender (yo incluido).
un saludo!
pd. estas haciendo este flooder para aquel proyecto en el que os juntasteis unos cuantos de este foro?