示例#1
0
文件: main.c 项目: yupyupp/meebee
int main (int argc, char* argv[]) {

    /* Data reading initilization */
    data_init();

    spawn_socket();

    return 0;
}
示例#2
0
int accept(int socket, struct sockaddr * addr, int * addr_len) {
   if(socket<1 || socket>SGIP_SOCKET_MAXSOCKETS || !addr || !addr_len) return SGIP_ERROR(EINVAL);
   SGIP_INTR_PROTECT();
   sgIP_Record_TCP * ret;
   int retval,s;
   retval=SGIP_ERROR0(EINVAL);
   ret=0;
   socket--;
   if(!(socketlist[socket].flags&SGIP_SOCKET_FLAG_VALID)) { SGIP_INTR_UNPROTECT(); return SGIP_ERROR(EINVAL); }
   if((socketlist[socket].flags&SGIP_SOCKET_FLAG_TYPEMASK)==SGIP_SOCKET_FLAG_TYPE_TCP) {
      s=spawn_socket((socketlist[socket].flags&SGIP_SOCKET_FLAG_NONBLOCKING) | SGIP_SOCKET_FLAG_TYPE_TCP);
      if(s>0) {
         do {
            ret=sgIP_TCP_Accept((sgIP_Record_TCP *)socketlist[socket].conn_ptr);
            if(ret!=0) break;
            if(errno!=EWOULDBLOCK) break;
            if(socketlist[socket].flags&SGIP_SOCKET_FLAG_NONBLOCKING) break;
            SGIP_INTR_UNPROTECT(); // give interrupts a chance to occur.
            SGIP_WAITEVENT(); // don't just try again immediately
            SGIP_INTR_REPROTECT();
         } while(1);
      }
      if(ret==0) {
         kill_socket(s);
         retval=-1;
      } else {
		 *addr_len=sizeof(struct sockaddr_in);
		 ((struct sockaddr_in *)addr)->sin_family=AF_INET;
		 ((struct sockaddr_in *)addr)->sin_port=ret->destport;
		 ((struct sockaddr_in *)addr)->sin_addr.s_addr=ret->destip;
         socketlist[s-1].conn_ptr=ret;
         retval=s;
      }
   }
   SGIP_INTR_UNPROTECT();
   return retval;
}