📄 h_sockopt_lingr_srv.c
字号:
/* * Copyright (C) 1999-2006 MITSUBISHI ELECTRIC CORPORATION and * RENESAS SOLUTIONS CORPORATION and * RENESAS TECHNOLOGY CORPORATION * All rights reserved. * * TCP/IP Test Application program [API]. */#include <stdio.h>#include <signal.h>#include <ctype.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netinet/tcp.h>#include <netdb.h>#include "config.h"extern int errno;int sd, sd2;void sig_hdr(){ /* printf("received SIGINT.\n"); */ shutdown(sd, SHUT_RDWR); if (close(sd) < 0) { printf("close is NG.\n"); exit(1); } printf("close is OK.\n"); shutdown(sd2, SHUT_RDWR); if (close(sd2) < 0) { printf("close2 is NG.\n"); exit(1); } printf("close2 is OK.\n"); exit(0);}#define BIG_SIZE (16*1024)/* * TCP server program */main(argc, argv)int argc;char **argv;{ int i, len; struct sockaddr_in sinme, sindst; char buf[BIG_SIZE]; int addrlen; int total; signal(SIGINT, sig_hdr);for (i=0; i < 2; i++) {if (i == 0)printf("for TEST-1\n");elseprintf("for TEST-2\n"); errno = 0; /* create an endpoint for TCP communication */ if ((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("socket is NG.(errno=%d)\n", errno); exit(1); } printf("socket is OK.\n"); memset((char *)&sinme, 0, sizeof(struct sockaddr_in)); sinme.sin_family = AF_INET; sinme.sin_addr.s_addr = inet_addr(SUN_ADDR);if (i == 0) sinme.sin_port = htons(SUN_PORT);else sinme.sin_port = htons(SUN_PORT +1); if (bind(sd, (struct sockaddr *)&sinme, sizeof(sinme)) < 0) { printf("bind is NG.(errno=%d)\n", errno); close(sd); exit(1); } printf("bind is OK.\n"); if (listen(sd, 5) < 0) { printf("listen is NG.(errno=%d)\n", errno); close(sd); exit(1); } printf("listen is OK.\n"); addrlen = sizeof(sindst); if ((sd2 = accept(sd, (struct sockaddr *)&sindst, &addrlen)) < 0) { printf("accept is NG.(errno=%d)\n", errno); close(sd); exit(1); } printf("accept is OK.\n"); total = 0; while ((len = recv(sd2, buf, sizeof(buf), 0)) > 0) { printf("recv is OK.(size=%d)\n", len); total += len; } if (len < 0) { printf("recv is NG.(errno=%d)\n", errno); } else { if (total < BIG_SIZE) { printf("OK: because of setting setsockopt(LINGER) on client.\n"); } printf("total size = %d (cf. 16KB = %d)\n", total, BIG_SIZE); } shutdown(sd, SHUT_RDWR); if (shutdown(sd2, SHUT_RDWR) < 0) { printf("shutdown is NG.(errno=%d)\n", errno); } printf("shutdown is OK.\n"); close(sd); if (close(sd2) < 0) { printf("close is NG.(errno=%d)\n", errno); } printf("close is OK.\n\n"); /* sleep(2); */} exit(0);}/* EOF */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -