C ++ - 套接字服务器的线程

时间:2016-09-14 13:04:02

标签: c++ linux multithreading sockets server

我试图实现一个在自己的线程中运行的服务器。 稍后,服务器应该与另一个线程一起工作。 这甚至可能吗?

我目前尝试实现此目的:

df1 <- structure(list(ID = c(60842L, 90853L, 90854L, 83907L, 83908L, 
83909L), EMAIL_ID.x = c("k@aol.com", "a.b.c", "b.c.d", "h@gwi.net", 
"s@hotmail.com", "l@rediff.com"), JPNUMBER.y = c(60842L, NA, 
NA, 2854L, 952L, 78895L), EMAIL_ID.y = c("k@aol.com", NA, NA, 
NA, NA, NA)), .Names = c("ID", "EMAIL_ID.x", "JPNUMBER.y", "EMAIL_ID.y"
), row.names = c(NA, -6L), class = "data.frame")

Server.h

#include "EtherServer.h"

int main(int argc, char *argv[])
{
    EtherServer* es = new EtherServer();
    es->init();
    return 0;
}

Server.cpp

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>
#include <pthread.h>

#ifndef ETHERSERVER_H_
#define ETHERSERVER_H_

class EtherServer
{
    public:
        bool init();
        static void* runServer(void *arg);
        static void sigchld_handler(int s);
        static void* get_in_addr(struct sockaddr *sa);

        static int s_sockfd;

    private:

};

#endif /* ETHERSERVER_H_ */

1 个答案:

答案 0 :(得分:1)

您的主题作为main()的子主体运行。当你从main返回时,它的子线程也会被杀死。

不是返回,而是main必须执行它自己的一些等待操作,这样它才会在所有子线程完成时干净地退出。