void CHttpSocket::StartWork(void) { int ret; if (!m_inited) { return; } m_tid = new pthread_t[m_worker](); if (!m_tid) { cout << pthread_self() << ": new tid array failed" << endl; return; } NonBlockConnect(); if (m_run) { signal(SIGPIPE, SIG_IGN); FormatRequestHeader(); for (int i = 0; i < m_worker; ++i) { ret = pthread_create(&m_tid[i], NULL, CHttpSocket::DoWork, (void *)this); if (ret != 0) { cout << pthread_self() << ": create thread failed:" << strerror(errno) << endl; m_run = false; return; } cout << m_tid[i] << " is running" << endl; } } return; }
int DoConnect(const char *ip, const int port, const int msec) { struct sockaddr_in sa; int conn_fd; int rv; /*assert(ip != NULL && port != 0);*/ /* 创建 socket */ if ((conn_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) return ERR_TCPLIB_OTHERS; /* 创建 socket 失败 */ /* 设置 sockaddr_in 结构 */ bzero(&sa, sizeof(sa)); sa.sin_family = AF_INET; #ifdef HAVE_INET_ATON if (inet_aton(ip, &sa.sin_addr) <= 0) #else if (inet_pton(AF_INET, ip, &sa.sin_addr) <= 0) #endif return ERR_TCPLIB_OTHERS; /* 获取服务器地址失败 */ sa.sin_port = htons(port); /* 创建连接 */ rv = NonBlockConnect(conn_fd, (struct sockaddr *)&sa, sizeof(sa), msec); if (rv < 0) { /* 创建连接失败,关掉 socket */ close(conn_fd); return rv; } return conn_fd; }