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 }