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; }
// 读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; }