static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int u_accept(int fd, char *hostn, int hostnsize) { struct sockaddr_in net_client; int len = sizeof(struct sockaddr); int retval; struct hostent *hostptr; while ( ((retval = accept(fd, (struct sockaddr *)(&net_client), &len)) == -1) && (errno == EINTR) ) ; if (retval == -1) return retval; if ( (hostn == NULL) || (hostnsize <= 0) ) return retval; pthread_mutex_lock(&mutex); hostptr = gethostbyaddr((char *)&(net_client.sin_addr), 4, AF_INET); if (hostptr == NULL) strncpy(hostn, "unknown",hostnsize-1); else strncpy(hostn, (*hostptr).h_name,hostnsize-1); hostn[hostnsize-1] = 0; pthread_mutex_unlock(&mutex); return retval; }