Advertisement
Guest User

das

a guest
Mar 29th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.18 KB | None | 0 0
  1. //#include <time.h>
  2.  
  3. #include <sys/types.h> /* basic system data types */
  4. #include <sys/socket.h> /* basic socket definitions */
  5. #include <sys/time.h> /* timeval{} for select() */
  6. #include <time.h> /* timespec{} for pselect() */
  7. #include <netinet/in.h> /* sockaddr_in{} and other Internet defns */
  8. #include <arpa/inet.h> /* inet(3) functions */
  9. #include <errno.h>
  10. #include <fcntl.h> /* for nonblocking */
  11. #include <netdb.h>
  12. #include <signal.h>
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <string.h>
  16. #include <netinet/tcp.h> /* for TCP_MAXSEG */
  17. #include <unistd.h>
  18.  
  19. #define MAXLINE 10240
  20. #define COUNT 10000
  21. #define PORT_NR 13
  22.  
  23. //#define SA struct sockaddr
  24.  
  25. #define LISTENQ 2
  26.  
  27. void handler(int s){
  28. printf("mamy Cie\n");
  29. return;
  30. }
  31.  
  32.  
  33. int
  34. main(int argc, char **argv)
  35. {
  36. int listenfd, connfd, sndbuf;
  37. socklen_t slen;
  38. char buff[MAXLINE], str[INET6_ADDRSTRLEN+1];
  39. time_t ticks;
  40. struct sockaddr_in6 servaddr, cliaddr;
  41. int mss,i,len;
  42. int bufsize=2000;
  43. struct timeval start, stop;
  44.  
  45.  
  46. if ( (listenfd = socket(AF_INET6, SOCK_STREAM, 0)) < 0){
  47. fprintf(stderr,"socket error : %s\n", strerror(errno));
  48. return 1;
  49. }
  50.  
  51. bzero(&servaddr, sizeof(servaddr));
  52. servaddr.sin6_family = AF_INET6;
  53. if(argc == 1)
  54. servaddr.sin6_addr = in6addr_any;
  55. else{
  56. if( inet_pton(AF_INET6, argv[1], &servaddr.sin6_addr) != 1 ){
  57. printf("ERROR: Address format error\n");
  58. return -1;
  59. }
  60. }
  61. servaddr.sin6_port = htons(PORT_NR); /* daytime server */
  62.  
  63.  
  64. #ifdef SO_REUSEADDR
  65. sndbuf = 1;
  66. if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &sndbuf, sizeof(sndbuf)) < 0){
  67. fprintf(stderr,"SO_REUSEADDR setsockopt error : %s\n", strerror(errno));
  68. }
  69. #endif
  70.  
  71. if ( bind( listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){
  72. fprintf(stderr,"bind error : %s\n", strerror(errno));
  73. return 1;
  74. }
  75.  
  76.  
  77. len = sizeof(sndbuf);
  78. if (getsockopt(listenfd, SOL_SOCKET, SO_SNDBUF, &sndbuf, &len) < 0){
  79. fprintf(stderr,"SO_SNDBUF getsockopt error : %s\n", strerror(errno));
  80. }
  81.  
  82. len = sizeof(mss);
  83. if (getsockopt(listenfd, IPPROTO_TCP, TCP_MAXSEG, &mss, &len) < 0){
  84. fprintf(stderr,"TCP_MAXSEG getsockopt error : %s\n", strerror(errno));
  85. }
  86.  
  87. printf("defaults: SO_SNDBUF = %d, MSS = %d\n", sndbuf, mss);
  88.  
  89. #ifdef SND_BUF
  90. sndbuf = bufsize; /* a prime number */
  91. if (setsockopt(listenfd, SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof(sndbuf)) < 0){
  92. fprintf(stderr,"SO_SNDBUF setsockopt error : %s\n", strerror(errno));
  93. }
  94.  
  95. len = sizeof(sndbuf);
  96. if (getsockopt(listenfd, SOL_SOCKET, SO_SNDBUF, &sndbuf, &len) < 0){
  97. fprintf(stderr,"SO_SNDBUF getsockopt error : %s\n", strerror(errno));
  98. }
  99.  
  100. len = sizeof(mss);
  101. if (getsockopt(listenfd, IPPROTO_TCP, TCP_MAXSEG, &mss, &len) < 0){
  102. fprintf(stderr,"TCP_MAXSEG getsockopt error : %s\n", strerror(errno));
  103. }
  104.  
  105. printf("SO_SNDBUF = %d (after setting it to %i), MSS = %d\n", sndbuf, bufsize, mss);
  106.  
  107. #define MSS 1300
  108. mss=MSS;i
  109. if( setsockopt(listenfd, IPPROTO_TCP, TCP_MAXSEG, &mss, sizeof(mss)) == -1){
  110. fprintf(stderr,"setsockopt error : %s\n", strerror(errno));
  111. return 1;
  112. }
  113. len = sizeof(mss);
  114. if( getsockopt(listenfd, IPPROTO_TCP, TCP_MAXSEG, &mss, &len) == -1 ){
  115. fprintf(stderr,"getsockopt error : %s\n", strerror(errno));
  116. return 3;
  117. }
  118. printf("MSS: = %d (after setting it to %d)\n", mss, MSS);
  119.  
  120. struct linger sl;
  121. sl.l_onoff=1;
  122. sl.l_linger=5;
  123. setsockopt(listenfd, SOL_SOCKET, SO_LINGER, &sl, sizeof(sl));
  124. #endif //SND_BUF
  125.  
  126. if ( listen(listenfd, LISTENQ) < 0){
  127. fprintf(stderr,"listen error : %s\n", strerror(errno));
  128. return 1;
  129. }
  130.  
  131.  
  132. for ( ; ; ) {
  133. slen = sizeof(cliaddr);
  134. if ( (connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &slen)) < 0){
  135. fprintf(stderr,"accept error : %s\n", strerror(errno));
  136. continue;
  137. }
  138.  
  139. len = sizeof(sndbuf);
  140. if (getsockopt(connfd, SOL_SOCKET, SO_SNDBUF, &sndbuf, &len) < 0){
  141. fprintf(stderr,"SO_SNDBUF getsockopt error : %s\n", strerror(errno));
  142. }
  143.  
  144. len = sizeof(mss);
  145. if (getsockopt(connfd, IPPROTO_TCP, TCP_MAXSEG, &mss, &len) < 0){
  146. fprintf(stderr,"TCP_MAXSEG getsockopt error : %s\n", strerror(errno));
  147. }
  148.  
  149. printf("SO_SNDBUF = %d (after CONNECT), MSS = %d\n", sndbuf, mss);
  150.  
  151.  
  152. bzero(str, sizeof(str));
  153. inet_ntop(AF_INET6, (struct sockaddr *) &cliaddr.sin6_addr, str, sizeof(str));
  154. printf("Connection from %s\n", str);
  155.  
  156. for(i=0; i < MAXLINE; i++){
  157. buff[i]='z';
  158. }
  159.  
  160.  
  161. ticks = time(NULL);
  162. snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
  163. if( write(connfd, buff, strlen(buff))< 0 )
  164. fprintf(stderr,"write error : %s\n", strerror(errno));
  165.  
  166. gettimeofday(&start,0);
  167. //for(i=0; i < COUNT; i++){
  168. i=1;
  169. while(1){
  170. i++;
  171. signal(SIGPIPE, handler);
  172.  
  173. if( write(connfd, buff, MAXLINE)< 0 ){
  174. fprintf(stderr,"write error : %s\n", strerror(errno));
  175. //signal(SIGPIPE, handler);
  176. //printf("KONIEC");
  177. //break;
  178. }
  179. gettimeofday(&stop,0);
  180. if( (stop.tv_sec - start.tv_sec) > 5 )
  181. break;
  182. }
  183. printf("Wrote %d segments\n", i);
  184. fflush(stdout);
  185.  
  186. close(connfd);
  187. }
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement