Ejemplo n.º 1
0
void CTCPSocketAsync::Accepted()
{
	try
	{
		//Add to async list
		AddSocketToList();

		//Go to async mode
		SetAsync();
	}
	ERROR_HANDLER("CTCPSocketAsync")
}
Ejemplo n.º 2
0
int CreateSocket(const struct sockaddr *MyAddr){
    if(List != NULL){                                               //  如果链表为空
        LinkC_Debug("CreateSocket: LinkC Socket Environment Not Initialized",LINKC_FAILURE);
        return LINKC_FAILURE;                                       //  返回错误
    }
    LinkC_Socket *Socket    =   (LinkC_Socket*)malloc(sizeof(LinkC_Socket));    //  为套接字结构体分配内存
    Socket->Sockfd          =   socket(AF_INET,SOCK_DGRAM,0);         //  创建UDP套接字
    if(Socket->Sockfd < 0){                                                     //  如果创建套接字失败
        perror("Create LCUDP");                                                 //  打印错误信息
        free(Socket);                                                           //  释放内存
        return 1;                                                               //  返回错误
    }
    /*  我也不知道这段是什么意思,不过大概就是说设置成在收到数据的时候发送一个信息这么回事    */
    if(fcntl(Socket->Sockfd,F_SETOWN,getpid()) == -1){
        perror("Set Own");
        close(Socket->Sockfd);                                                  //  关闭套接字
        free(Socket);                                                           //  释放内存
        return 1;                                                               //  返回错误
    }
    int flag = fcntl(Socket->Sockfd,F_GETFL,0);                                 //  获得那啥FL?
    if(flag == -1){                                                             //  如果出错
        perror("Get FL");                                                       //  打印错误信息
        close(Socket->Sockfd);                                                  //  关闭套接字
        free(Socket);                                                           //  释放内存
        return 1;                                                               //  返回错误
    }
    if(fcntl(Socket->Sockfd,F_SETFL,flag | O_ASYNC) == -1){                     //  如果设置成受到数据就发信号的那啥套接字失败
        perror("Set FL");                                                       //  打印错误信息
        close(Socket->Sockfd);                                                  //  关闭套接字
        free(Socket);                                                           //  释放内存
        return 1;                                                               //  返回错误
    }
    if (fcntl(Socket->Sockfd,F_SETSIG,SIGIO) == -1){
        perror("fault");
    }
    if(bind(Socket->Sockfd,MyAddr,sizeof(struct sockaddr_in)) < 0){             //  绑定地址
        perror("Bind LCUDP");                                                   //  输出错误信息
        close(Socket->Sockfd);                                                  //  关闭套接字
        free(Socket);                                                           //  释放内存
        return 1;
    }


    Socket->Available       =   0;                                              //  将可用包数设置为0
    Socket->SendList        =   BuildPackageList();                             //  创建链表
    Socket->RecvList        =   BuildPackageList();                             //  创建链表
    Socket->RecvBuffer      =   malloc(STD_BUFFER_SIZE);                        //  建立接收缓冲区
    Socket->SendBuffer      =   malloc(STD_BUFFER_SIZE);                        //  建立发送缓冲区

    AddSocketToList(Socket);                                                    //  将当前套接字加入到片轮列表
    return Socket->Sockfd;                                                      //  返回创建的套接子
}
Ejemplo n.º 3
0
BOOL CUDPSocketAsync::Create()
{
	try
	{
		if (!CUDPSocket::Create())
			return FALSE;
		else
		{
			//Add the socket to a list
			AddSocketToList();

			//Exit
			return TRUE;
		}
	}
	ERROR_HANDLER_RETURN("Create",FALSE)
}
Ejemplo n.º 4
0
BOOL CTCPSocketAsync::Create()
{
	try
	{
		if (!CTCPSocket::Create())
			return FALSE;
		else
		{
			//Reset events type
			m_bCloseEventsOnly=FALSE;

			//New async settings
			SocketCreated();

			//Add to list
			AddSocketToList();

			//Done
			return TRUE;
		}
	}
	ERROR_HANDLER_RETURN("Create",FALSE)
}