rendered paste bodyint 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
}