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@0: # 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@0: int id_query __P4(ident_t *, id, meillo@0: int, lport, meillo@0: int, fport, meillo@0: struct timeval *, timeout) meillo@0: */ meillo@0: meillo@0: int id_query __P(( ident_t *id, meillo@0: int lport, meillo@0: int fport, meillo@0: __STRUCT_TIMEVAL_P timeout)) meillo@0: { meillo@0: #ifdef SIGRETURNTYPE meillo@0: SIGRETURNTYPE (*old_sig)(); meillo@0: #else meillo@0: void (*old_sig) __P((int)); meillo@0: #endif meillo@0: int res; meillo@0: char buf[80]; meillo@0: fd_set ws; meillo@0: meillo@0: sprintf(buf, "%d , %d\r\n", lport, fport); meillo@0: meillo@0: if (timeout) meillo@0: { meillo@0: FD_ZERO(&ws); meillo@0: FD_SET(id->fd, &ws); meillo@0: meillo@0: #ifdef __hpux meillo@0: if ((res = select(FD_SETSIZE, (int *)0, (int *)&ws, (int *)0, timeout)) < 0) meillo@0: #else meillo@0: if ((res = select(FD_SETSIZE, (fd_set *)0, &ws, (fd_set *)0, timeout)) < 0) meillo@0: #endif meillo@0: return -1; meillo@0: meillo@0: if (res == 0) meillo@0: { meillo@0: errno = ETIMEDOUT; meillo@0: return -1; meillo@0: } meillo@0: } meillo@0: meillo@0: old_sig = signal(SIGPIPE, SIG_IGN); meillo@0: meillo@0: res = write(id->fd, buf, strlen(buf)); meillo@0: meillo@0: signal(SIGPIPE, old_sig); meillo@0: meillo@0: return res; meillo@0: }