if (bind(res, (struct sockaddr * ) &sock,sizeof(sock)) == -1) {
rprintf(FERROR,"bind failed on port %d: %s\n", port,
strerror(errno));
+ if (errno == EACCES && port < 1024) {
+ rprintf(FERROR, "Note: you must be root to bind "
+ "to low-numbered ports");
+ }
close(res);
return -1;
}
*/
int is_a_socket(int fd)
{
- int v, l;
+ int v;
+ socklen_t l;
l = sizeof(int);
/* Parameters to getsockopt, setsockopt etc are very
* unstandardized across platforms, so don't be surprised if
- * there are compiler warnings on e.g. SCO OpenSwerver. It
- * seems they all eventually get the right idea.
+ * there are compiler warnings on e.g. SCO OpenSwerver or AIX.
+ * It seems they all eventually get the right idea.
*
* Debian says: ``The fifth argument of getsockopt and
* setsockopt is in reality an int [*] (and this is what BSD
fd_set fds;
int fd;
struct sockaddr addr;
- int in_addrlen = sizeof(addr);
+ socklen_t in_addrlen = sizeof(addr);
/* close log file before the potentially very long select so
file can be trimmed by another process instead of growing
if(!FD_ISSET(s, &fds)) continue;
/* See note above prototypes. */
- fd = accept(s,&addr,&in_addrlen);
+ fd = accept(s,&addr, &in_addrlen);
if (fd == -1) continue;
{
struct sockaddr sa;
struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
- int length = sizeof(sa);
+ socklen_t length = sizeof(sa);
static char name_buf[100];
struct hostent *hp;
char **p;