accept_eintr.c 782 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "unp.h"
  2. /* Let's see if accept() is automatically restarted by the implementation. */
  3. void
  4. sig_int(int signo)
  5. {
  6. printf("received SIGINT\n");
  7. return;
  8. }
  9. int
  10. main(int argc, char **argv)
  11. {
  12. int listenfd, connfd;
  13. socklen_t clilen;
  14. struct sockaddr_in cliaddr, servaddr;
  15. listenfd = Socket(AF_INET, SOCK_STREAM, 0);
  16. bzero(&servaddr, sizeof(servaddr));
  17. servaddr.sin_family = AF_INET;
  18. servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  19. servaddr.sin_port = htons(SERV_PORT);
  20. Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
  21. Listen(listenfd, LISTENQ);
  22. Signal(SIGINT, sig_int); /* sets SA_RESTART */
  23. for ( ; ; ) {
  24. clilen = sizeof(cliaddr);
  25. connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);
  26. /* error from Accept() if not restarted */
  27. }
  28. }