Ejemplo n.º 1
0
int test_tcp_srv()
{
    int ret;
    char buf[128] = {0};

    TcpSocket tcp_srv;

    // open
    tcp_srv.open();
    tcp_srv.setReuseAddr(1);
    tcp_srv.show();

    // bind
    if (tcp_srv.bind(SocketIpv4Address("0.0.0.0", 8888)) < 0) {
        perror("bind");
        return -1;
    }
    tcp_srv.show();

    // listen
    if (tcp_srv.listen() < 0) {
        perror("listen");
        return -1;
    }
    tcp_srv.show();

    // accept    
    TcpSocket *sock = tcp_srv.accept();
    sock->show();

    while(1) {
        
        ret = sock->recvMsg(buf, sizeof(buf));

        if (ret == 0) {
            fprintf(stdout, "close the fd[%d]\n", sock->getSocketFd());
            break;
        } else if (ret < 0) {
            perror("read");
            break;
        }
        printf("ret: %d buf: %s\n", ret, buf);   
    }

    tcp_srv.close();

    return 0;
}
Ejemplo n.º 2
0
// 读tcp 连接
int SocketManager::readFromTcpConn(fd_set *r_set, char *buffer, size_t size,int nready)
{
    int ret = 0;    
    std::vector<TcpSocket *>::iterator iter2;
    for (iter2 = m_tcp_conns.begin(); iter2 != m_tcp_conns.end();) {
        TcpSocket * sock = *iter2;
        if (FD_ISSET(sock->getSocketFd(), r_set)) {               
            printf("receive from tcp conns [%d].\n", sock->getSocketFd());
            ret = sock->recvMsg(buffer, size);             
            if (ret > 0) {
                printf("buffer: %s\n", buffer);
    
                procTcpMsg(sock , buffer, size);
                
                iter2++;
            } else {
                if (ret == 0) {
                    printf("the peer close the socket\n"); 
                } else {
                    perror("read");
                }
                iter2 = m_tcp_conns.erase(iter2);
                delete sock;
            }

            if (--nready <= 0) {
                break;
            } else {
                continue;
            }
        }
    
        iter2++;
    }

    printf("readFromTcpConn nready[%d]\n", nready);
    return nready;
}