summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2011-09-01 03:36:29 +0000
committerGreg Hudson <ghudson@mit.edu>2011-09-01 03:36:29 +0000
commit279a040bf3bf98a81502410dd71ccdc630683233 (patch)
tree69297b0d4f9b47dc965a238de8721982875ad91a
parent458c1bd81c13cd535a005406d3fa399e30b8c758 (diff)
downloadkrb5-279a040bf3bf98a81502410dd71ccdc630683233.tar.gz
krb5-279a040bf3bf98a81502410dd71ccdc630683233.tar.xz
krb5-279a040bf3bf98a81502410dd71ccdc630683233.zip
Fix connection termination bug in sendto_kdc
When terminating a connection, close and invalidate conn->fd so that we don't look for it in selstate on the next select or poll invocation. Looking for such an fd is harmless when using select, but results in an assertion failure when using poll. ticket: 6951 git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25120 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/krb5/os/sendto_kdc.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/lib/krb5/os/sendto_kdc.c b/src/lib/krb5/os/sendto_kdc.c
index 541598787..2856c09a7 100644
--- a/src/lib/krb5/os/sendto_kdc.c
+++ b/src/lib/krb5/os/sendto_kdc.c
@@ -913,12 +913,12 @@ maybe_send(krb5_context context, struct conn_state *conn,
static void
kill_conn(struct conn_state *conn, struct select_state *selstate, int err)
{
+ dprint("abandoning connection %d: %m\n", conn->fd, err);
+ cm_remove_fd(selstate, conn->fd);
+ closesocket(conn->fd);
+ conn->fd = INVALID_SOCKET;
conn->state = FAILED;
conn->err = err;
- shutdown(conn->fd, SHUTDOWN_BOTH);
- cm_remove_fd(selstate, conn->fd);
- dprint("abandoning connection %d: %m\n", conn->fd, err);
- /* Fix up max fd for next select call. */
}
/* Check socket for error. */