meillo@0: /* meillo@0: ** id_query.c Transmit a query to an IDENT server meillo@0: ** meillo@0: ** Author: Peter Eriksson meillo@0: */ meillo@0: meillo@0: #ifdef NeXT3 meillo@0: # include meillo@0: #endif meillo@0: meillo@0: #include meillo@0: #include meillo@0: #include meillo@0: meillo@0: #ifdef HAVE_ANSIHEADERS meillo@0: # include meillo@0: # include meillo@0: # include meillo@0: #endif meillo@0: meillo@0: #include meillo@0: #include meillo@0: #include meillo@0: meillo@0: #ifdef _AIX meillo@0: # include meillo@0: #endif meillo@0: meillo@0: #ifdef _AIX meillo@0: # include meillo@0: #endif meillo@0: #ifdef VMS meillo@10: # include /* for fd_set */ meillo@0: #endif meillo@0: #define IN_LIBIDENT_SRC meillo@0: #include "ident.h" meillo@0: meillo@0: meillo@0: /* meillo@10: int meillo@10: id_query __P4(ident_t *, id, int, lport, int, fport, struct timeval *, timeout) meillo@0: */ meillo@0: meillo@10: int meillo@10: id_query __P((ident_t * id, int lport, int fport, __STRUCT_TIMEVAL_P timeout)) meillo@0: { meillo@0: #ifdef SIGRETURNTYPE meillo@10: SIGRETURNTYPE(*old_sig) (); meillo@0: #else meillo@10: void (*old_sig) __P((int)); meillo@0: #endif meillo@10: int res; meillo@10: char buf[80]; meillo@10: fd_set ws; meillo@10: meillo@10: sprintf(buf, "%d , %d\r\n", lport, fport); meillo@10: meillo@10: if (timeout) { meillo@10: FD_ZERO(&ws); meillo@10: FD_SET(id->fd, &ws); meillo@0: meillo@0: #ifdef __hpux meillo@10: if ((res = select(FD_SETSIZE, (int *) 0, (int *) &ws, (int *) 0, timeout)) < 0) meillo@0: #else meillo@10: if ((res = select(FD_SETSIZE, (fd_set *) 0, &ws, (fd_set *) 0, timeout)) < 0) meillo@0: #endif meillo@10: return -1; meillo@10: meillo@10: if (res == 0) { meillo@10: errno = ETIMEDOUT; meillo@10: return -1; meillo@10: } meillo@0: } meillo@0: meillo@10: old_sig = signal(SIGPIPE, SIG_IGN); meillo@10: meillo@10: res = write(id->fd, buf, strlen(buf)); meillo@10: meillo@10: signal(SIGPIPE, old_sig); meillo@10: meillo@10: return res; meillo@0: }