00001 #include "tcpsocket.h" 00002 00003 namespace n2nc { 00004 namespace net { 00005 00006 TcpSocket::TcpSocket(int af) : Socket(af,SOCK_STREAM){} 00007 TcpSocket::TcpSocket() : Socket(){} 00008 TcpSocket::~TcpSocket() {} 00009 00010 int TcpSocket::setListen(int backlog){ 00011 this->setSockOpt(SO_REUSEADDR, true, SOL_SOCKET); 00012 int ret = ::listen(this->m_fd,backlog); 00013 if (ret == -1){ 00014 N2NC_PRINT("listen_error: %s\n",strerror(errno) ); 00015 } 00016 else{ 00017 this->m_islisten = true ; 00018 } 00019 return ret; 00020 } 00021 00022 Socket* TcpSocket::accept(){ 00024 struct sockaddr_storage ss; 00025 size_t len = sizeof(ss) ; 00026 int sock; 00027 TcpSocket *obj_sock ; 00028 memset(&ss,0, sizeof(ss)); 00029 sock = ::accept(this->m_fd,(struct sockaddr*)&ss,&len); 00031 if (sock == -1){ 00033 N2NC_PRINT("accept_error: %s\n",strerror(errno) ); 00034 return NULL ; 00035 } 00036 00037 obj_sock = new TcpSocket(); 00038 obj_sock->m_type = this->m_type ; 00039 obj_sock->m_fd = sock ; 00040 obj_sock->m_af = this->m_af ; 00041 obj_sock->m_islisten = false ; 00042 00043 return obj_sock; 00044 } 00045 00046 bool TcpSocket::isListen(){ 00047 return this->m_islisten ; 00048 } 00049 00050 00051 } 00052 }