tcprecv05.c 718 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "unp.h"
  2. int listenfd, connfd;
  3. void sig_urg(int);
  4. int
  5. main(int argc, char **argv)
  6. {
  7. int size;
  8. if (argc == 2)
  9. listenfd = Tcp_listen(NULL, argv[1], NULL);
  10. else if (argc == 3)
  11. listenfd = Tcp_listen(argv[1], argv[2], NULL);
  12. else
  13. err_quit("usage: tcprecv05 [ <host> ] <port#>");
  14. size = 4096;
  15. Setsockopt(listenfd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
  16. connfd = Accept(listenfd, NULL, NULL);
  17. Signal(SIGURG, sig_urg);
  18. Fcntl(connfd, F_SETOWN, getpid());
  19. for ( ; ; )
  20. pause();
  21. }
  22. void
  23. sig_urg(int signo)
  24. {
  25. int n;
  26. char buff[2048];
  27. printf("SIGURG received\n");
  28. n = Recv(connfd, buff, sizeof(buff)-1, MSG_OOB);
  29. buff[n] = 0; /* null terminate */
  30. printf("read %d OOB byte\n", n);
  31. }