X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/blobdiff_plain/54d280df8f543fee760303c72f429c9c4b4dac78..64c78745f1e1ef7ecd8166b3af5b80d0d142cfb9:/aim_rxqueue.c diff --git a/aim_rxqueue.c b/aim_rxqueue.c index c625bc2..6cc1806 100644 --- a/aim_rxqueue.c +++ b/aim_rxqueue.c @@ -6,6 +6,7 @@ * aim_rxhandlers.c. */ +#define FAIM_INTERNAL #include #ifndef _WIN32 @@ -57,17 +58,25 @@ faim_export int aim_get_command(struct aim_session_t *sess, struct aim_conn_t *c if (!sess || !conn) return 0; + if (conn->fd == -1) + return -1; /* its a aim_conn_close()'d connection */ + if (conn->fd < 3) /* can happen when people abuse the interface */ return 0; + if (conn->status & AIM_CONN_STATUS_INPROGRESS) + return aim_conn_completeconnect(sess, conn); + /* * Rendezvous (client-client) connections do not speak * FLAP, so this function will break on them. */ if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) return aim_get_command_rendezvous(sess, conn); - if (conn->type == AIM_CONN_TYPE_RENDEZVOUS_OUT) + if (conn->type == AIM_CONN_TYPE_RENDEZVOUS_OUT) { + printf("out on fd %d\n", conn->fd); return 0; + } /* * Read FLAP header. Six bytes: