X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fs_bsd.c;h=7e3205af764cf2f3d72694d4d54363cb3b262f0f;hb=45f48562be5b65c0d8721a2de10f881ebb2dd59f;hp=63e9081c51da376193f3a01b9884c8e76b2da4be;hpb=6a896dc3a06393ec254a43bd5ac4b7e282d4a968;p=ircu2.10.12-pk.git diff --git a/ircd/s_bsd.c b/ircd/s_bsd.c index 63e9081..7e3205a 100644 --- a/ircd/s_bsd.c +++ b/ircd/s_bsd.c @@ -238,7 +238,7 @@ static int connect_inet(struct ConfItem* aconf, struct Client* cptr) /* * Set the TOS bits - this is nonfatal if it doesn't stick. */ - if (!os_set_tos(cli_fd(cptr), FEAT_TOS_SERVER)) { + if (!os_set_tos(cli_fd(cptr), feature_int(FEAT_TOS_SERVER))) { report_error(TOS_ERROR_MSG, cli_name(cptr), errno); } if ((result = os_connect_nonb(cli_fd(cptr), &aconf->address)) == IO_FAILURE) { @@ -862,6 +862,11 @@ static void client_sock_callback(struct Event* ev) case ET_ERROR: /* an error occurred */ fallback = cli_info(cptr); cli_error(cptr) = ev_data(ev); + /* If the OS told us we have a bad file descriptor, we should + * record that for future reference. + */ + if (cli_error(cptr) == EBADF) + cli_fd(cptr) = -1; if (s_state(&(con_socket(con))) == SS_CONNECTING) { completed_connection(cptr); /* for some reason, the os_get_sockerr() in completed_connect()