time_t t;
time_t tt;
initcon(struct con *cp, int fd, struct sockaddr *sa){	time_t t;	char *tmp;	int error;	time(&t);	free(cp->obuf);	cp->obuf = NULL;	cp->osize = 0;	free(cp->blacklists);	cp->blacklists = NULL;	free(cp->lists);	cp->lists = NULL;	bzero(cp, sizeof(struct con));	if (grow_obuf(cp, 0) == NULL)		err(1, "malloc");	cp->fd = fd;	if (sa->sa_len > sizeof(cp->ss))		errx(1, "sockaddr size");	if (sa->sa_family != AF_INET)		errx(1, "not supported yet");	memcpy(&cp->ss, sa, sa->sa_len);	cp->af = sa->sa_family;	cp->ia = &((struct sockaddr_in *)sa)->sin_addr;	cp->blacklists = sdl_lookup(blacklists, cp->af, cp->ia);	cp->stutter = (greylist && !grey_stutter && cp->blacklists == NULL) ?	    0 : stutter;	error = getnameinfo(sa, sa->sa_len, cp->addr, sizeof(cp->addr), NULL, 0,	    NI_NUMERICHOST);	if (error)		errx(1, "%s", gai_strerror(error));	tmp = strdup(ctime(&t));	if (tmp == NULL)		err(1, "malloc");	tmp[strlen(tmp) - 1] = '\0'; /* nuke newline */	snprintf(cp->obuf, cp->osize, "220 %s ESMTP %s; %s\r\n",	    hostname, spamd, tmp);	free(tmp);	cp->op = cp->obuf;	cp->ol = strlen(cp->op);	cp->w = t + cp->stutter;	cp->s = t;	strlcpy(cp->rend, "\n", sizeof cp->rend);	clients++;	if (cp->blacklists != NULL) {		blackcount++;		if (greylist && blackcount > maxblack) {			closecon(cp); /* close and free */			return;		}		cp->lists = strdup(loglists(cp));	}	else		cp->lists = NULL;}