diff options
author | Greg Hudson <ghudson@mit.edu> | 2011-09-01 03:36:29 +0000 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2011-09-01 03:36:29 +0000 |
commit | 279a040bf3bf98a81502410dd71ccdc630683233 (patch) | |
tree | 69297b0d4f9b47dc965a238de8721982875ad91a | |
parent | 458c1bd81c13cd535a005406d3fa399e30b8c758 (diff) | |
download | krb5-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.c | 8 |
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. */ |