/* Process events on a UDP socket. Return true if we get a reply. */ static krb5_boolean service_udp_read(krb5_context context, const krb5_data *realm, struct conn_state *conn, struct select_state *selstate) { int nread; nread = recv(conn->fd, conn->in.buf, conn->in.bufsize, 0); if (nread < 0) { TRACE_SENDTO_KDC_UDP_ERROR_RECV(context, &conn->addr, SOCKET_ERRNO); kill_conn(context, conn, selstate); return FALSE; } conn->in.pos = nread; return TRUE; }
static int service_udp_fd(krb5_context context, struct conn_state *conn, struct select_state *selstate, int ssflags) { int nread; if (!(ssflags & (SSF_READ|SSF_EXCEPTION))) abort(); if (conn->state != READING) abort(); nread = recv(conn->fd, conn->x.in.buf, conn->x.in.bufsize, 0); if (nread < 0) { TRACE_SENDTO_KDC_UDP_ERROR_RECV(context, conn, SOCKET_ERRNO); kill_conn(conn, selstate, SOCKET_ERRNO); return 0; } conn->x.in.pos = conn->x.in.buf + nread; return 1; }