rcvbufset.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "unp.h"
  2. #include <netinet/tcp.h> /* for TCP_MAXSEG */
  3. int
  4. main(int argc, char **argv)
  5. {
  6. int sockfd, rcvbuf, mss;
  7. socklen_t len;
  8. struct sockaddr_in servaddr;
  9. if (argc != 2)
  10. err_quit("usage: rcvbufset <IPaddress>");
  11. sockfd = Socket(AF_INET, SOCK_STREAM, 0);
  12. len = sizeof(rcvbuf);
  13. Getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, &len);
  14. len = sizeof(mss);
  15. Getsockopt(sockfd, IPPROTO_TCP, TCP_MAXSEG, &mss, &len);
  16. printf("defaults: SO_RCVBUF = %d, MSS = %d\n", rcvbuf, mss);
  17. rcvbuf = 9973; /* a prime number */
  18. Setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof(rcvbuf));
  19. len = sizeof(rcvbuf);
  20. Getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, &len);
  21. printf("SO_RCVBUF = %d (after setting it to 9973)\n", rcvbuf);
  22. bzero(&servaddr, sizeof(servaddr));
  23. servaddr.sin_family = AF_INET;
  24. servaddr.sin_port = htons(13); /* daytime server */
  25. Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
  26. Connect(sockfd, (SA *) &servaddr, sizeof(servaddr));
  27. len = sizeof(rcvbuf);
  28. Getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, &len);
  29. len = sizeof(mss);
  30. Getsockopt(sockfd, IPPROTO_TCP, TCP_MAXSEG, &mss, &len);
  31. printf("after connect: SO_RCVBUF = %d, MSS = %d\n", rcvbuf, mss);
  32. exit(0);
  33. }