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

📄 socketchat.c

📁 一个C语言的聊天室源代码
💻 C
字号:
/*
	Version: 0.2.0(stable)
	Author: Computer_xu
	Email: Computer_xu@sina.com
	HomePage: http://www.socketchat.com
	LastModify: 2001-05-07 (yyyy-mm-dd)
*/
#include "socketchat.h"

int sockfd;

int main(int argc, char *argv[])
{
        int pid;
        int addrlen=sizeof(struct sockaddr_in);
        struct sockaddr_in srv_addr;
        PTHREAD_INFO *p;
        pthread_t send_id;
        int i;
        FILE *fp;

        printf("Starting...\n");
        InitSystem();
        p=sysinfo.PTHREAD_HEAD;
        if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
        {
                perror("socket");
                exit(1);
        }
        memset(&srv_addr,0,addrlen);
        srv_addr.sin_family=AF_INET;
        srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
        srv_addr.sin_port=htons(sysinfo.nPort);
        if(bind(sockfd,(struct sockaddr *)&srv_addr,addrlen)<0)
        {
                perror("bind");
                close(sockfd);
                exit(2);
        }
        listen(sockfd,50);
        pid=getpid();
        printf("Main Process ID is %d\n",pid);
        /* fp=Fopen("/var/run/schat.pid","w"); */
        fp=Fopen("../schat.pid","w");
        fprintf(fp,"%d",pid);
        fclose(fp);
 
	/* chroot */
	printf("Change Root ... ");
        if( chroot("./") )
        {
                perror("chroot");
                exit(1);
        }
	printf("Ok\n");

	/* 不在root权限下运行 */
	/* change run id */
	printf("Change Run Id from Root to Normal ... ");
	setuid(getuid());
	setgid(getgid());
	printf("Ok\n");

        /* 创建轮寻发送数据到客户端的线程 */
        printf("SendData Thread Creating ...\n");
        if(pthread_create(&send_id,NULL,SendData,(void*)NULL)>0)
        {
                perror("pthread_create");
                exit(3);
        }
	/* 等待SendData线程一个空循环,可以去掉 */
	sleep(1);
        /* 创建线程 */
        printf("All Threads Creating ... \n");
        i=1;
        while( p!=NULL )
        {
                /* printf("Create %d thread...",i); */
                thread_make(p);
                /* printf("OK\n"); */
                p=p->next;
                i++;
        }
        printf("Ok! %d threads created!\n", i-1);

        /* 创建防掉线线程 */
        printf("AntiTimeout Thread Creating ...\n");
        if(pthread_create(&send_id,NULL,(void *)&AntiTimeout,(void*)NULL)>0)
        {
                perror("pthread_create");
                exit(4);
        }

        printf("System is running...\n");

	printf("Mcount = %d\n",Mcount);

        signal(SIGHUP,SIG_IGN);  /* re-init */
        signal(SIGTERM,sig_quit); /* quit */
        signal(SIGPIPE,SIG_IGN);  /* connect break out */
        signal(SIGCLD,SIG_IGN);
        signal(SIGINT,SIG_IGN);

        for(;;)
                pause();
}

⌨️ 快捷键说明

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