home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / rsync221.zip / connection.c < prev    next >
C/C++ Source or Header  |  1999-03-04  |  1KB  |  50 lines

  1. /* 
  2.    Copyright (C) Andrew Tridgell 1998
  3.    
  4.    This program is free software; you can redistribute it and/or modify
  5.    it under the terms of the GNU General Public License as published by
  6.    the Free Software Foundation; either version 2 of the License, or
  7.    (at your option) any later version.
  8.    
  9.    This program is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.    GNU General Public License for more details.
  13.    
  14.    You should have received a copy of the GNU General Public License
  15.    along with this program; if not, write to the Free Software
  16.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17. */
  18.  
  19. /* support the max connections option */
  20. #include "rsync.h"
  21.  
  22.  
  23. /****************************************************************************
  24. simple routine to do connection counting
  25. ****************************************************************************/
  26. int claim_connection(char *fname,int max_connections)
  27. {
  28.     int fd, i;
  29.  
  30.     if (max_connections <= 0)
  31.         return 1;
  32.  
  33.     fd = open(fname,O_RDWR|O_CREAT, 0600);
  34.  
  35.     if (fd == -1) {
  36.         return 0;
  37.     }
  38.  
  39.     /* find a free spot */
  40.     for (i=0;i<max_connections;i++) {
  41.         if (lock_range(fd, i*4, 4)) return 1;
  42.     }        
  43.  
  44.     /* only interested in open failures */
  45.     errno = 0;
  46.  
  47.     close(fd);
  48.     return 0;
  49. }
  50.