00001 #include "socketevents.h"
00002
00003 namespace n2nc {
00004 namespace net {
00005
00006 SocketEvents::SocketEvents(){
00007 this->m_recvbuff = (char*)::malloc(65535);
00008 }
00009
00010
00011 SocketEvents::~SocketEvents(){
00012 free(this->m_recvbuff);
00013 }
00014
00015 int SocketEvents::onSelectEvent(SocketEventsHandler::socket_extra_t* sock_extra, SocketEventsHandler::check_for_t cause ){
00016 int retval ;
00017 std::cerr << "onSelectEvent" << std::endl ;
00018
00020 sock_extra->check = (SocketEventsHandler::check_for_t) (sock_extra->check | SocketEventsHandler::NOTHING) ;
00021 int tmp_cause ;
00022 if(cause & SocketEventsHandler::READ){
00023
00024 if ((sock_extra->sock->getType() == SOCK_STREAM) && ((TcpSocket*)sock_extra->sock)->isListen() )
00025 this->onNewConnection(*sock_extra->sock);
00026 else{
00027 retval = ::recv(sock_extra->sock->getFD(), this->m_recvbuff, 65535, MSG_DONTWAIT | MSG_PEEK) ;
00028 if (retval > 0)
00029 this->onReceive(*sock_extra->sock,retval);
00030 else{
00031 sock_extra->last_errno = errno ;
00032 this->onClose(*sock_extra->sock);
00033 }
00034 }
00035 }
00036 if(cause & SocketEventsHandler::WRITE){
00037 this->onWriteComplete(*sock_extra->sock);
00038 }
00039 if(cause & SocketEventsHandler::EXCEPT){
00040 this->onError(*sock_extra->sock);
00041 }
00042 return 0 ;
00043 }
00044
00045
00046 }
00047
00048 }
00049