# HG changeset patch # User Daniel Atallah # Date 1218583367 0 # Node ID 2a8af2ed4b49098582452bdc5db7d8042bfae99c # Parent 239ee71307c6df889ebc8805c696685f8c89c470 Use non-blocking io for IRC DCC transfers. diff -r 239ee71307c6 -r 2a8af2ed4b49 libpurple/protocols/irc/dcc_send.c --- a/libpurple/protocols/irc/dcc_send.c Tue Aug 12 23:16:58 2008 +0000 +++ b/libpurple/protocols/irc/dcc_send.c Tue Aug 12 23:22:47 2008 +0000 @@ -245,7 +245,7 @@ static void irc_dccsend_send_connected(gpointer data, int source, PurpleInputCondition cond) { PurpleXfer *xfer = (PurpleXfer *) data; struct irc_xfer_send_data *xd = xfer->data; - int conn; + int conn, flags; conn = accept(xd->fd, NULL, 0); if (conn == -1) { @@ -262,6 +262,12 @@ close(xd->fd); xd->fd = -1; + flags = fcntl(conn, F_GETFL); + fcntl(conn, F_SETFL, flags | O_NONBLOCK); +#ifndef _WIN32 + fcntl(conn, F_SETFD, FD_CLOEXEC); +#endif + xd->inpa = purple_input_add(conn, PURPLE_INPUT_READ, irc_dccsend_send_read, xfer); /* Start the transfer */ purple_xfer_start(xfer, conn, NULL, 0);