readable_listen.c 746 B

1234567891011121314151617181920212223242526272829303132
  1. #include "icmpd.h"
  2. int
  3. readable_listen(void)
  4. {
  5. int i, connfd;
  6. socklen_t clilen;
  7. clilen = sizeof(cliaddr);
  8. connfd = Accept(listenfd, (SA *)&cliaddr, &clilen);
  9. /* 4find first available client[] structure */
  10. for (i = 0; i < FD_SETSIZE; i++)
  11. if (client[i].connfd < 0) {
  12. client[i].connfd = connfd; /* save descriptor */
  13. break;
  14. }
  15. if (i == FD_SETSIZE) {
  16. close(connfd); /* can't handle new client, */
  17. return(--nready); /* rudely close the new connection */
  18. }
  19. printf("new connection, i = %d, connfd = %d\n", i, connfd);
  20. FD_SET(connfd, &allset); /* add new descriptor to set */
  21. if (connfd > maxfd)
  22. maxfd = connfd; /* for select() */
  23. if (i > maxi)
  24. maxi = i; /* max index in client[] array */
  25. return(--nready);
  26. }