/* process successful connection */ static void t_connected(transfer *tr) { int callval_i; int connect_error; SIGNEDSOCK int connect_error_len = sizeof(connect_error); tr->con.connecttime = gdata.curtime; FD_CLR(tr->con.clientsocket, &gdata.writeset); callval_i = getsockopt(tr->con.clientsocket, SOL_SOCKET, SO_ERROR, &connect_error, &connect_error_len); if (callval_i < 0) { outerror(OUTERROR_TYPE_WARN, "Couldn't determine upload connection status on %s: %s", gnetwork->name, strerror(errno)); t_closeconn(tr, "Download Connection Failed status:", errno); return; } if (connect_error) { t_closeconn(tr, "Download Connection Failed", connect_error); return; } ioutput(OUT_S|OUT_L|OUT_D, COLOR_MAGENTA, "Download Connection Established on %s", gnetwork->name); t_setup_send(tr); return; }
void t_establishcon (transfer * const t) { SIGNEDSOCK int addrlen; updatecontext(); addrlen = (t->con.family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6); if ((t->con.clientsocket = accept(t->con.listensocket, &t->con.local.sa, &addrlen)) < 0) { int errno2 = errno; outerror(OUTERROR_TYPE_WARN, "Accept Error, Aborting: %s", strerror(errno)); t_closeconn(t, "Connection Error, Try Again", errno2); return; } ir_listen_port_connected(t->con.localport); event_close(t->con.listensocket); t->con.listensocket = FD_UNUSED; t_setup_send(t); }