int sock_connect(struct sock_t *sock) { struct sockaddr_in sin; int ce; char c[10]; TRACE_ENTER DEBUG("connecting to %s:%d\n", sock->ip, sock->port); sock->fd = socket(AF_INET, SOCK_STREAM, 0); if (sock->fd == -1) { return -1; } if (inet_aton(sock->ip, &sin) != 1) { perror("inet_aton"); exit(0); } sin.sin_port = htons(sock->port); DEBUG("ip %s:%d\n", inet_ntoa(sin), ntohs(sin.sin_port)); sin.sin_family = AF_INET; fcntl(sock->fd, F_SETFL, O_NONBLOCK); ce = connect(sock->fd, (struct sockaddr *)&sin, sizeof(sin)); if (ce == -1) { if (errno != 36) { // sads :( DEBUG("connect() failed: %d\n", errno); perror("connect"); TRACE_LEAVE return -1; } } event_set(&sock->ev, sock->fd, EV_READ, sock_on_connect, sock); sock->tv.tv_sec = 50; sock->tv.tv_usec = 0; event_add(&sock->ev, &sock->tv); TRACE_LEAVE }