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

📄 serve.c

📁 socket编程
💻 C
字号:
#include <stdio.h>
#include <signal.h>
#include <errno.h>

#include "sock_func.h"
#include "proc_func.h"

void outfunc()
{
	printf("serve has been stop !\n");
	/*msgctl(msqid , IPC_RMID, 0);*/

	exit(0);	
}

void timefunc()
{
	/*TraceLog_str("accept happen timeout!");*/

	alarm(60);
}

void main()
{
	int     clien , childpid       	;
	int     newsockfd            	;
	struct  sockaddr_in cli_addr	;
	int		rval					;
	int 	sockfd	 				;

	signal(SIGINT , outfunc ) ;
	signal(SIGTERM, outfunc ) ;
	signal(SIGALRM, timefunc) ;

	printf("tty=%s\n",ttyname());

	/*----------------------------*/
	/* initialization for SOCKET  */
	/*----------------------------*/
	rval = socket_init( &sockfd ) ;

	if ( rval < 0 ) {
		return ;
	}

	/*-------------------------------*/
	/* enter the loop for processing */
	/*-------------------------------*/
	for ( ; ; ) {

		clien = sizeof(cli_addr) ;

		alarm(60) ;

		newsockfd = accept( sockfd , (struct sockaddr *)&cli_addr , &clien ) ;

		alarm(0) ;

		if ( newsockfd < 0 ) {
   			TraceLog_str("accept happen error!\n");
   			return ;
		}

       	childpid = fork();

       	if ( childpid == -1 ) {
			exit(-1) ;
		}

	   	else if ( childpid == 0 ) {

			/*------------------------*/
			/*      child process     */
			/*------------------------*/

			close( sockfd ) ;

			TraceLog_str("one client has been linked!"); 

			process_request( newsockfd ) ;

			shutdown(newsockfd,SHUT_RDWR);
			
			close( newsockfd ) ;

			exit(0) ;

		}

		else {

			/*------------------------*/
			/*      parent process    */
			/*------------------------*/

			close( newsockfd ) ;

			wait((int*)0) ;

		}

	}


/*

		kill(childpid , SIGKILL);

		shutdown(sockfd,SHUT_RDWR);

		close( sockfd );

		printf("serve is stop!\n");

*/


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -