⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 h_sockopt_lingr_srv.c

📁 T-kernel Tcp/ip Protocol Stack Sample
💻 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 + -