Пример #1
0
void rrawbin3D(struct data *d,int dataorder,int type,int precision)
{
  char indir[MAXPATHLEN];
  int datamode;

#ifdef DEBUG
  struct timeval tp;
  double t1,t2;
  int rtn;
  fprintf(stdout,"\n%s: %s()\n",__FILE__,__FUNCTION__);
  fprintf(stdout,"  Reading raw 3D data\n");
  rtn=gettimeofday(&tp, NULL);
  t1=(double)tp.tv_sec+(1.e-6)*tp.tv_usec;
  fflush(stdout);
#endif

  /* Check that type is valid */
  if (type != CX) {
    fprintf(stderr,"\n%s: %s()\n",__FILE__,__FUNCTION__);
    fprintf(stderr,"  Invalid 3rd argument %s(*,*,'type',*)\n",__FUNCTION__);
    fflush(stderr);
    return;
  }

  datamode=FID;
  /* If FT has been done flag it as IMAGE */
  if ((d->dimstatus[0] & FFT) || (d->dimstatus[1] & FFT) || (d->dimstatus[2] & FFT)) datamode=IMAGE;

  /* Set up input directory (indir) according to type */
  switch(datamode) {
    case FID: strcpy(indir,"raw"); break;
    default:  strcpy(indir,"recon"); break;
  }
  strcat(indir,"CX");
  switch(dataorder) {
    case D12: setblock(d,d->nv);  strcat(indir,"_D12");  break;
    case D3:  setblock(d,d->nv2); strcat(indir,"_D3");   break;
  }
  strcat(indir,".raw");
  /* Select input */
  if (d->nr>1) get3Draw(d,'i',indir,dataorder);
  else get3Draw(d,'s',indir,dataorder);

#ifdef DEBUG
  rtn=gettimeofday(&tp, NULL);
  t2=(double)tp.tv_sec+(1.e-6)*tp.tv_usec;
  fprintf(stdout,"  Took %f secs\n",t2-t1);
  fflush(stdout);
#endif
}
Пример #2
0
int main(void) {
   char buf[BUFSIZE];
   int n;

   for ( ; ; ) {
      fprintf(stderr,"Blocking input on standard input\n");
      setblock(STDIN_FILENO);
      n = read(STDIN_FILENO,buf,BUFSIZE);
      if (n == 0)
         break;
      if (n > 0)
         fprintf(stderr,"Got %d bytes: %.*s\n",n,n,buf);
      else
         perror("nonblocking error");
      fprintf(stderr,"Nonblocking input on standard input\n");
      n = 0;
      setnonblock(STDIN_FILENO);
      while (n <= 0) {
         n = read(STDIN_FILENO,buf,BUFSIZE);
         if (n > 0)
            fprintf(stderr,"Got %d bytes: %.*s\n",n,n,buf);
         else
            perror("blocking error");
         sleep(1);
      }
   }
   return 0;
} 
Пример #3
0
int connect(int sockfd, const struct sockaddr *serv_addr,socklen_t addrlen,int tmo)
{
//#ifndef _WIN32
	struct timeval	tv;
	fd_set	wset;
	int ret;
	if(tmo==0)
		return connect(sockfd,serv_addr,addrlen);
	return connect(sockfd,serv_addr,addrlen);
/*	state=fcntl(sockfd, F_GETFL, 0);
	fcntl(sockfd, F_SETFL, state|O_NONBLOCK );
*/
	setnoblock(sockfd);
	connect(sockfd,serv_addr,addrlen);
	tv.tv_sec=tmo;
	tv.tv_usec=0;
	FD_ZERO(&wset);
	FD_SET(sockfd,&wset);
	ret = select(sockfd+1,NULL,&wset,NULL,&tv);
//	fcntl(sockfd, F_SETFL, state );
	setblock(sockfd);
	if(ret<=0)
		return -1;
	return 0;
/*#else
	return connect(sockfd,serv_addr,addrlen);
#endif
*/
};
Пример #4
0
void mysocket::clear_recvq(int len)
{
	if(len<=0)
		return;
	char *str=(char *)malloc(len);
	setnoblock(new_socket);
	::recv(new_socket,str,len,0);
	setblock(new_socket);
	free(str);
}
Пример #5
0
Файл: util.c Проект: lufia/tc
void
dictinit(char *fname)
{
	Stream *fin;
	Block *b;

	fin = sopen(fname, OREAD);
	while(b = getblock(fin)){
		setblock(b);
		free(b);
	}
	sclose(fin);
}
Пример #6
0
void main()
{
    char mess[80];
    int fd;
    int numch;

    schedule();

    /*pid = fork();	//not needed
    if ( pid == 0 )
        {
          while (1) 
             { 
              i++;
              if (i % 10000 == 0 ) putc('.',stderr); //child
             }
        }
    else { */

        fd = open("/dev/tty",O_RDWR);
        setblock(fd,false);

        sigemptyset(&sig);  /* clear the signal mask */
        newhandler.sa_handler = next;
        newhandler.sa_mask = sig;
        newhandler.sa_flags = 0;

        if ( sigaction(SIGALRM,&newhandler,&oldhandler) == -1 )
          {
            printf("1 - can't install signal handler \n");
            exit(-1);
          }

        while (1) 
	{
          alarm(3);
          pause();
          switch  ( numch = read(fd,mess,80))  
	  {
          case -1 :
          case 0 :
              break;
          default: 
	      fprintf(stderr," %d   <%s>\n",numch,mess);
          }
          fprintf(stderr," in parent\n");
        }
     
}
Пример #7
0
void main() {

		char mess[80]; //user input message stored in this array
		int fd;
    	int numch;

        fd = open("/dev/tty",O_RDWR);
        setblock(fd,false);

        sigemptyset(&sig);  /* clear the signal mask */
        newhandler.sa_handler = next;  /*go to the next() function*/
        newhandler.sa_mask = sig;
        newhandler.sa_flags = 0;

        if ( sigaction(SIGALRM,&newhandler,&oldhandler) == -1 ) {
            	printf("1 - can't install signal handler \n");
            	exit(-1);
        }
        while (1) {
        	alarm(3);
        	pause();
        	switch  ( numch = read(fd,mess,80)) {
        		case -1 :
        		case  0 : break;
          		default : mess[numch-1] = '\0';  //put null character at end of string
	          			  //fprintf(stderr," %d   <%s>\n",numch,mess);
            			  pid[i] = fork();
            			  if ( pid[i] == 0 ) {				
							  strcpy(path,"./");
							  strcat(path,mess);
							  execl(path,mess,NULL);
             			  } 
						  else { 
		 					  i++; 
		 					  numProcess++;
	       				  }
            }
            fprintf(stderr,"This is the parent process.\n");
			fprintf(stderr,"Enter process name to execute.\n\n");
        }

}
Пример #8
0
int himd_writestream_write(struct himd_writestream * stream, struct blockinfo * audioblock, struct himderrinfo *status)
{
    unsigned char data[HIMD_BLOCKINFO_SIZE];
    g_return_val_if_fail(stream != NULL, -1);
    g_return_val_if_fail(audioblock != NULL, -1);
    status = status;
    stream = stream;

    // serialize the block descriptor
    setblock(audioblock, data);

    // write the block descriptor to the current position in the stream at 'stream->curblockno'
    if(fwrite(data, 16384, 1, stream->atdata) != 1)
	{
	    perror("fwrite block\n");
	    fprintf(stderr, "Error writing block to position %d\n", stream->curblockno);
	    return -1;
	}
    return 0;
}
Пример #9
0
int msocketx::connect(const char* pszip,unsigned short usport,bool bblock)
{
    if (pszip == NULL)
        return -1;

    if (!isvalid())
    {
        if (! create(SOCK_STREAM,0))
            return -1;
    }
    setblock(bblock);

    sockaddr_in addr = {0};

    addr.sin_port = htons(usport);
    addr.sin_addr.s_addr = inet_addr(pszip);
    addr.sin_family = AF_INET;

    return ::connect(m_sock,(sockaddr*)&addr,sizeof(addr));
}
Пример #10
0
static rval_t re_connect(conn_t* conn){
		rval_t rval;

		rval.err = 0;

		if((conn->sockfd = socket(PF_INET,SOCK_STREAM,0))<0){
			  debug_err(" create socket failed! errno[%d]\n", errno);
			  rval.err = errno;
			  return rval;
		}
		sock_general_init(conn->sockfd);
		
		rval.v = connect(conn->sockfd,(struct sockaddr *)&conn->addr, sizeof(struct sockaddr));
		if(rval.v == -1){
				rval.err = errno;
				close(conn->sockfd);
		}
		setblock(conn->sockfd, 0);  //not block

		return rval;

}
Пример #11
0
int main(){

	int fd;
	int numch;

		fd = open("/dev/tty",O_RDWR); // Opens the keyboard.
        	setblock(fd,false);	// Read won't block.

        	sigemptyset(&sig);  /* clear the signal mask */
        	newhandler.sa_handler = monitor; // Designates the handler.
        	newhandler.sa_mask = sig;
        	newhandler.sa_flags = 0;

        	if ( sigaction(SIGALRM,&newhandler,&oldhandler) == -1 ){
	
			printf("1 - can't install signal handler \n");
			exit(-1);
		}

        	while (1) {
			printf("\n**** In parent. ***** \n\n");
			alarm(1);
			pause();
			switch  ( numch = read(fd, process, 256))  {
				case -1 :
				case 0 :
					break;
				default: 

					process[numch-1] = '\0';
					scheduler();
					
			}

		
	}
return 0;
}
Пример #12
0
/*
 * Initialize a cylinder group.
 */
void
initcg(int cylno, time_t utime)
{
	long blkno, start;
	uint i, j, d, dlower, dupper;
	ufs2_daddr_t cbase, dmax;
	struct ufs1_dinode *dp1;
	struct ufs2_dinode *dp2;
	struct csum *cs;

	/*
	 * Determine block bounds for cylinder group.
	 * Allow space for super block summary information in first
	 * cylinder group.
	 */
	cbase = cgbase(&sblock, cylno);
	dmax = cbase + sblock.fs_fpg;
	if (dmax > sblock.fs_size)
		dmax = sblock.fs_size;
	dlower = cgsblock(&sblock, cylno) - cbase;
	dupper = cgdmin(&sblock, cylno) - cbase;
	if (cylno == 0)
		dupper += howmany(sblock.fs_cssize, sblock.fs_fsize);
	cs = &fscs[cylno];
	memset(&acg, 0, sblock.fs_cgsize);
	acg.cg_time = utime;
	acg.cg_magic = CG_MAGIC;
	acg.cg_cgx = cylno;
	acg.cg_niblk = sblock.fs_ipg;
	acg.cg_initediblk = sblock.fs_ipg < 2 * INOPB(&sblock) ?
	    sblock.fs_ipg : 2 * INOPB(&sblock);
	acg.cg_ndblk = dmax - cbase;
	if (sblock.fs_contigsumsize > 0)
		acg.cg_nclusterblks = acg.cg_ndblk / sblock.fs_frag;
	start = &acg.cg_space[0] - (u_char *)(&acg.cg_firstfield);
	if (Oflag == 2) {
		acg.cg_iusedoff = start;
	} else {
		acg.cg_old_ncyl = sblock.fs_old_cpg;
		acg.cg_old_time = acg.cg_time;
		acg.cg_time = 0;
		acg.cg_old_niblk = acg.cg_niblk;
		acg.cg_niblk = 0;
		acg.cg_initediblk = 0;
		acg.cg_old_btotoff = start;
		acg.cg_old_boff = acg.cg_old_btotoff +
		    sblock.fs_old_cpg * sizeof(int32_t);
		acg.cg_iusedoff = acg.cg_old_boff +
		    sblock.fs_old_cpg * sizeof(u_int16_t);
	}
	acg.cg_freeoff = acg.cg_iusedoff + howmany(sblock.fs_ipg, CHAR_BIT);
	acg.cg_nextfreeoff = acg.cg_freeoff + howmany(sblock.fs_fpg, CHAR_BIT);
	if (sblock.fs_contigsumsize > 0) {
		acg.cg_clustersumoff =
		    roundup(acg.cg_nextfreeoff, sizeof(u_int32_t));
		acg.cg_clustersumoff -= sizeof(u_int32_t);
		acg.cg_clusteroff = acg.cg_clustersumoff +
		    (sblock.fs_contigsumsize + 1) * sizeof(u_int32_t);
		acg.cg_nextfreeoff = acg.cg_clusteroff +
		    howmany(fragstoblks(&sblock, sblock.fs_fpg), CHAR_BIT);
	}
	if (acg.cg_nextfreeoff > (unsigned)sblock.fs_cgsize) {
		printf("Panic: cylinder group too big\n");
		exit(37);
	}
	acg.cg_cs.cs_nifree += sblock.fs_ipg;
	if (cylno == 0)
		for (i = 0; i < (long)ROOTINO; i++) {
			setbit(cg_inosused(&acg), i);
			acg.cg_cs.cs_nifree--;
		}
	if (cylno > 0) {
		/*
		 * In cylno 0, beginning space is reserved
		 * for boot and super blocks.
		 */
		for (d = 0; d < dlower; d += sblock.fs_frag) {
			blkno = d / sblock.fs_frag;
			setblock(&sblock, cg_blksfree(&acg), blkno);
			if (sblock.fs_contigsumsize > 0)
				setbit(cg_clustersfree(&acg), blkno);
			acg.cg_cs.cs_nbfree++;
		}
	}
	if ((i = dupper % sblock.fs_frag)) {
		acg.cg_frsum[sblock.fs_frag - i]++;
		for (d = dupper + sblock.fs_frag - i; dupper < d; dupper++) {
			setbit(cg_blksfree(&acg), dupper);
			acg.cg_cs.cs_nffree++;
		}
	}
	for (d = dupper; d + sblock.fs_frag <= acg.cg_ndblk;
	     d += sblock.fs_frag) {
		blkno = d / sblock.fs_frag;
		setblock(&sblock, cg_blksfree(&acg), blkno);
		if (sblock.fs_contigsumsize > 0)
			setbit(cg_clustersfree(&acg), blkno);
		acg.cg_cs.cs_nbfree++;
	}
	if (d < acg.cg_ndblk) {
		acg.cg_frsum[acg.cg_ndblk - d]++;
		for (; d < acg.cg_ndblk; d++) {
			setbit(cg_blksfree(&acg), d);
			acg.cg_cs.cs_nffree++;
		}
	}
	if (sblock.fs_contigsumsize > 0) {
		int32_t *sump = cg_clustersum(&acg);
		u_char *mapp = cg_clustersfree(&acg);
		int map = *mapp++;
		int bit = 1;
		int run = 0;

		for (i = 0; i < acg.cg_nclusterblks; i++) {
			if ((map & bit) != 0)
				run++;
			else if (run != 0) {
				if (run > sblock.fs_contigsumsize)
					run = sblock.fs_contigsumsize;
				sump[run]++;
				run = 0;
			}
			if ((i & (CHAR_BIT - 1)) != CHAR_BIT - 1)
				bit <<= 1;
			else {
				map = *mapp++;
				bit = 1;
			}
		}
		if (run != 0) {
			if (run > sblock.fs_contigsumsize)
				run = sblock.fs_contigsumsize;
			sump[run]++;
		}
	}
	*cs = acg.cg_cs;
	/*
	 * Write out the duplicate super block, the cylinder group map
	 * and two blocks worth of inodes in a single write.
	 */
	start = sblock.fs_bsize > SBLOCKSIZE ? sblock.fs_bsize : SBLOCKSIZE;
	bcopy((char *)&acg, &iobuf[start], sblock.fs_cgsize);
	start += sblock.fs_bsize;
	dp1 = (struct ufs1_dinode *)(&iobuf[start]);
	dp2 = (struct ufs2_dinode *)(&iobuf[start]);
	for (i = 0; i < acg.cg_initediblk; i++) {
		if (sblock.fs_magic == FS_UFS1_MAGIC) {
			dp1->di_gen = newfs_random();
			dp1++;
		} else {
			dp2->di_gen = newfs_random();
			dp2++;
		}
	}
	wtfs(fsbtodb(&sblock, cgsblock(&sblock, cylno)), iobufsize, iobuf);
	/*
	 * For the old file system, we have to initialize all the inodes.
	 */
	if (Oflag == 1) {
		for (i = 2 * sblock.fs_frag;
		     i < sblock.fs_ipg / INOPF(&sblock);
		     i += sblock.fs_frag) {
			dp1 = (struct ufs1_dinode *)(&iobuf[start]);
			for (j = 0; j < INOPB(&sblock); j++) {
				dp1->di_gen = newfs_random();
				dp1++;
			}
			wtfs(fsbtodb(&sblock, cgimin(&sblock, cylno) + i),
			    sblock.fs_bsize, &iobuf[start]);
		}
	}
}
Пример #13
0
int    
crypt_file( char *source, char *dest )
{
    char *s;
    int c;
    int iRow;
    int iCol;
    FILE *infile;
    FILE *outfile;

    while (!key_defined)
        crypt_key( KEY_IMMEDIATE, "?" );

    if ((infile = fopen( source, "rb" )) == NULL)
    {
        fprintf( stderr, "Can not open %s for reading.\n", source);
        return 1;
    }

    if ((outfile = fopen( dest, "wb" )) == NULL)
    {
        fprintf( stderr, "Can not open %s for writing.\n", dest);
        fclose( infile );
        return 1;
    }

    if ( encrypt_or_decrypt == DECRYPTION_SELECT )
    {
        c = rows;
        rows = columns;
        columns = c;
    }

    trans.max = rows * columns;
    while (trans.left=fread (trans.data, sizeof (char), trans.max, infile))
    {
        trans.next = trans.data;
        while (setblock() != 0)
            for(iCol=0; iCol<trans.column; iCol++)
                for(iRow=0; iRow<trans.row ;iRow++)
                {
                    c = *((trans.start)+iCol+iRow*(trans.column));
                    if (fputc(c, outfile) == EOF)
                    {
                        fprintf(stderr, "Could not write to output file %s\n", dest);
                        fclose( infile );
                        fclose( outfile );
                        return 1;
                    }
                }
        if(trans.left)                            /* if less than 3 bytes, reverse */
            for(iCol=0; iCol<trans.left; iCol++)
            {
                c = *(trans.start + trans.left - 1 - iCol);
                if (fputc(c, outfile) == EOF)
                {
                    fprintf(stderr, "Could not write to output file %s\n", dest);
                    fclose( infile );
                    fclose( outfile );
                    return 1;
                }
            }
    }

    if ( encrypt_or_decrypt == DECRYPTION_SELECT )
    {
        c = rows;
        rows = columns;
        columns = c;
    }

    fclose( infile );
    fclose( outfile );
    return 0;
}
Пример #14
0
/*
 * Initialize a cylinder group.
 */
void
initcg(int cylno, time_t utime)
{
	int i, j, d, dlower, dupper, blkno, start;
	daddr64_t cbase, dmax;
	struct ufs1_dinode *dp1;
	struct ufs2_dinode *dp2;
	struct csum *cs;

	/*
	 * Determine block bounds for cylinder group.  Allow space for
	 * super block summary information in first cylinder group.
	 */
	cbase = cgbase(&sblock, cylno);
	dmax = cbase + sblock.fs_fpg;
	if (dmax > sblock.fs_size)
		dmax = sblock.fs_size;
	if (fsbtodb(&sblock, cgsblock(&sblock, cylno)) + iobufsize / sectorsize
	    > fssize)
		errx(40, "inode table does not fit in cylinder group");

	dlower = cgsblock(&sblock, cylno) - cbase;
	dupper = cgdmin(&sblock, cylno) - cbase;
	if (cylno == 0)
		dupper += howmany(sblock.fs_cssize, sblock.fs_fsize);
	cs = &fscs[cylno];
	memset(&acg, 0, sblock.fs_cgsize);
	acg.cg_ffs2_time = utime;
	acg.cg_magic = CG_MAGIC;
	acg.cg_cgx = cylno;
	acg.cg_ffs2_niblk = sblock.fs_ipg;
	acg.cg_initediblk = MIN(sblock.fs_ipg, 2 * INOPB(&sblock));
	acg.cg_ndblk = dmax - cbase;

	start = sizeof(struct cg);
	if (Oflag <= 1) {
		/* Hack to maintain compatibility with old fsck. */
		if (cylno == sblock.fs_ncg - 1)
			acg.cg_ncyl = 0;
		else
			acg.cg_ncyl = sblock.fs_cpg;
		acg.cg_time = acg.cg_ffs2_time;
		acg.cg_ffs2_time = 0;
		acg.cg_niblk = acg.cg_ffs2_niblk;
		acg.cg_ffs2_niblk = 0;
		acg.cg_initediblk = 0;
		acg.cg_btotoff = start;
		acg.cg_boff = acg.cg_btotoff + sblock.fs_cpg * sizeof(int32_t);
		acg.cg_iusedoff = acg.cg_boff +
		    sblock.fs_cpg * sizeof(u_int16_t);
	} else {
		acg.cg_iusedoff = start;
	}

	acg.cg_freeoff = acg.cg_iusedoff + howmany(sblock.fs_ipg, CHAR_BIT);
	acg.cg_nextfreeoff = acg.cg_freeoff + howmany(sblock.fs_fpg, CHAR_BIT);
	if (acg.cg_nextfreeoff > sblock.fs_cgsize)
		errx(37, "panic: cylinder group too big: %d > %d",
		    acg.cg_nextfreeoff, sblock.fs_cgsize);
	acg.cg_cs.cs_nifree += sblock.fs_ipg;
	if (cylno == 0) {
		for (i = 0; i < ROOTINO; i++) {
			setbit(cg_inosused(&acg), i);
			acg.cg_cs.cs_nifree--;
		}
	}
	if (cylno > 0) {
		/*
		 * In cylno 0, space is reserved for boot and super blocks.
		 */
		for (d = 0; d < dlower; d += sblock.fs_frag) {
			blkno = d / sblock.fs_frag;
			setblock(&sblock, cg_blksfree(&acg), blkno);
			acg.cg_cs.cs_nbfree++;
			if (Oflag <= 1) {
				cg_blktot(&acg)[cbtocylno(&sblock, d)]++;
				cg_blks(&sblock, &acg, cbtocylno(&sblock, d))
				    [cbtorpos(&sblock, d)]++;
			}
		}
	}
	if ((i = dupper % sblock.fs_frag)) {
		acg.cg_frsum[sblock.fs_frag - i]++;
		for (d = dupper + sblock.fs_frag - i; dupper < d; dupper++) {
			setbit(cg_blksfree(&acg), dupper);
			acg.cg_cs.cs_nffree++;
		}
	}
	for (d = dupper;
	    d + sblock.fs_frag <= acg.cg_ndblk;
	    d += sblock.fs_frag) {
		blkno = d / sblock.fs_frag;
		setblock(&sblock, cg_blksfree(&acg), blkno);
		acg.cg_cs.cs_nbfree++;
		if (Oflag <= 1) {
			cg_blktot(&acg)[cbtocylno(&sblock, d)]++;
			cg_blks(&sblock, &acg, cbtocylno(&sblock, d))
			    [cbtorpos(&sblock, d)]++;
		}
	}
	if (d < acg.cg_ndblk) {
		acg.cg_frsum[acg.cg_ndblk - d]++;
		for (; d < acg.cg_ndblk; d++) {
			setbit(cg_blksfree(&acg), d);
			acg.cg_cs.cs_nffree++;
		}
	}
	*cs = acg.cg_cs;

	/*
	 * Write out the duplicate superblock, the cylinder group map
	 * and two blocks worth of inodes in a single write.
	 */
	start = sblock.fs_bsize > SBLOCKSIZE ? sblock.fs_bsize : SBLOCKSIZE;
	bcopy((char *)&acg, &iobuf[start], sblock.fs_cgsize);
	start += sblock.fs_bsize;
	dp1 = (struct ufs1_dinode *)(&iobuf[start]);
	dp2 = (struct ufs2_dinode *)(&iobuf[start]);
	for (i = MIN(sblock.fs_ipg, 2 * INOPB(&sblock)); i != 0; i--) {
		if (sblock.fs_magic == FS_UFS1_MAGIC) {
			dp1->di_gen = (u_int32_t)arc4random();
			dp1++;
		} else {
			dp2->di_gen = (u_int32_t)arc4random();
			dp2++;
		}
	}
	wtfs(fsbtodb(&sblock, cgsblock(&sblock, cylno)), iobufsize, iobuf);

	if (Oflag <= 1) {
		/* Initialize inodes for FFS1. */
		for (i = 2 * sblock.fs_frag;
		    i < sblock.fs_ipg / INOPF(&sblock);
		    i += sblock.fs_frag) {
			dp1 = (struct ufs1_dinode *)(&iobuf[start]);
			for (j = 0; j < INOPB(&sblock); j++) {
				dp1->di_gen = (u_int32_t)arc4random();
				dp1++;
			}
			wtfs(fsbtodb(&sblock, cgimin(&sblock, cylno) + i),
			    sblock.fs_bsize, &iobuf[start]);
		}
	}
}
Пример #15
0
	void chunk::pickblock(ubyte x, ubyte y, ubyte z){

		//这个sub根本没有存在的必要,其功能等于setblock(x,y,z,0)或putblock(x,y,z,0),但是本人的完...
		setblock(x, y, z, blocks::AIR);

	}
Пример #16
0
	void chunk::putblock(ubyte x, ubyte y, ubyte z, block iblock){

		//这个sub和上面那个是一样的,只是本人的完美主义(说白了就是强迫症)驱使我再写一遍= =
		setblock(x, y, z, iblock);

	}
Пример #17
0
/**
 * @brief connect to a host
 *
 * @see
 * @note
 *     h: pointer to s_host_t
 *     recv_sec: receive timeout seconds, 0 for never timeout
 *     return the socket when succ
 *     return < 0 when error, specially HOST_DOWN_FAIL indicate host dead
 * @author auxten <*****@*****.**> <*****@*****.**>
 * @date 2011-8-1
 **/
int connect_host(s_host_t * h, int recv_sec, int send_sec)
{
    int sock = -1;
    int ret;
    int select_ret;
    int res;
    socklen_t res_size = sizeof res;
    struct sockaddr_in channel;
    in_addr_t host;
    int addr_len;
    struct timeval recv_timeout;
    struct timeval send_timeout;
#if HAVE_POLL
#else
    fd_set wset;
#endif /* HAVE_POLL */

    addr_len = getaddr_my(h->addr, &host);
    if (FAIL_CHECK(!addr_len))
    {
        gko_log(WARNING, "gethostbyname %s error", h->addr);
        ret = -1;
        goto CONNECT_END;
    }
    sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (FAIL_CHECK(sock < 0))
    {
        gko_log(WARNING, "get socket error");
        ret = -1;
        goto CONNECT_END;
    }

    recv_timeout.tv_usec = 0;
    recv_timeout.tv_sec = recv_sec ? recv_sec : RCV_TIMEOUT;
    send_timeout.tv_usec = 0;
    send_timeout.tv_sec = send_sec ? send_sec : SND_TIMEOUT;

    memset(&channel, 0, sizeof(channel));
    channel.sin_family = AF_INET;
    memcpy(&channel.sin_addr.s_addr, &host, addr_len);
    channel.sin_port = htons(h->port);

    /** set the connect non-blocking then blocking for add timeout on connect **/
    if (FAIL_CHECK(setnonblock(sock) < 0))
    {
        gko_log(WARNING, "set socket non-blocking error");
        ret = -1;
        goto CONNECT_END;
    }

    /** connect and send the msg **/
    if (FAIL_CHECK(connect(sock, (struct sockaddr *) &channel, sizeof(channel)) &&
            errno != EINPROGRESS))
    {
        gko_log(WARNING, "connect error");
        ret = HOST_DOWN_FAIL;
        goto CONNECT_END;
    }

    /** Wait for write bit to be set **/
#if HAVE_POLL
    {
        struct pollfd pollfd;

        pollfd.fd = sock;
        pollfd.events = POLLOUT;

        /* send_sec is in seconds, timeout in ms */
        select_ret = poll(&pollfd, 1, (int)(send_sec * 1000 + 1));
    }
#else
    {
        FD_ZERO(&wset);
        FD_SET(sock, &wset);
        select_ret = select(sock + 1, 0, &wset, 0, &send_timeout);
    }
#endif /* HAVE_POLL */
    if (select_ret < 0)
    {
        gko_log(WARNING, "select/poll error on connect");
        ret = HOST_DOWN_FAIL;
        goto CONNECT_END;
    }
    if (!select_ret)
    {
        gko_log(WARNING, "connect timeout on connect");
        ret = HOST_DOWN_FAIL;
        goto CONNECT_END;
    }

    /**
     * check if connection is RESETed, maybe this is the
     * best way to do that
     * SEE: http://cr.yp.to/docs/connect.html
     **/
    (void) getsockopt(sock, SOL_SOCKET, SO_ERROR, &res, &res_size);
    if (CONNECT_DEST_DOWN(res))
    {
//        gko_log(NOTICE, "connect dest is down errno: %d", res);
        ret = HOST_DOWN_FAIL;
        goto CONNECT_END;
    }

    ///gko_log(WARNING, "selected %d ret %d, time %d", sock, select_ret, send_timeout.tv_sec);
    /** set back blocking **/
    if (FAIL_CHECK(setblock(sock) < 0))
    {
        gko_log(WARNING, "set socket non-blocking error");
        ret = -1;
        goto CONNECT_END;
    }

    /** set recv & send timeout **/
    if (FAIL_CHECK(setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *) &recv_timeout,
                    sizeof(struct timeval))))
    {
        gko_log(WARNING, "setsockopt SO_RCVTIMEO error");
        ret = -1;
        goto CONNECT_END;
    }
    if (FAIL_CHECK(setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *) &send_timeout,
                    sizeof(struct timeval))))
    {
        gko_log(WARNING, "setsockopt SO_SNDTIMEO error");
        ret = -1;
        goto CONNECT_END;
    }

    ret = sock;

    CONNECT_END:
    ///
    if (ret < 0 && sock >= 0)
    {
        close_socket(sock);
    }
    return ret;
}