void CTCPSocketAsync::Accepted() { try { //Add to async list AddSocketToList(); //Go to async mode SetAsync(); } ERROR_HANDLER("CTCPSocketAsync") }
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; // 返回创建的套接子 }
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) }
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) }