1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

Fix getsockopt/setsockopt handling of SO_SNDBUF/SO_RCVBUF options.

Reported by Park SungMin <byulparan_eng@icloud.com>
in <https://lists.gnu.org/archive/html/guile-user/2015-11/msg00026.html>.

* libguile/socket.c (scm_getsockopt, scm_setsockopt): Remove code that
  incorrectly assumed that the argument for SO_SNDBUF and SO_RCVBUF
  options was of type 'size_t'.  Both the Linux and POSIX documentation
  indicates that the argument is of type 'int', as is the case for most
  options.
This commit is contained in:
Mark H Weaver 2015-11-13 11:38:13 -05:00
parent 3e0605458a
commit e94a42c7f0

View file

@ -1,5 +1,5 @@
/* Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
* 2006, 2007, 2009, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
/* Copyright (C) 1996-1998, 2000-2007, 2009, 2011-2015
* Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
@ -508,19 +508,7 @@ SCM_DEFINE (scm_getsockopt, "getsockopt", 3, 0, 0,
scm_from_int (0));
#endif
}
else
#endif
if (0
#ifdef SO_SNDBUF
|| ioptname == SO_SNDBUF
#endif
#ifdef SO_RCVBUF
|| ioptname == SO_RCVBUF
#endif
)
{
return scm_from_size_t (*(size_t *) &optval);
}
}
return scm_from_int (*(int *) &optval);
}
@ -649,21 +637,7 @@ SCM_DEFINE (scm_setsockopt, "setsockopt", 4, 0, 0,
optval = &opt_int;
#endif
}
else
#endif
if (0
#ifdef SO_SNDBUF
|| ioptname == SO_SNDBUF
#endif
#ifdef SO_RCVBUF
|| ioptname == SO_RCVBUF
#endif
)
{
opt_int = scm_to_int (value);
optlen = sizeof (size_t);
optval = &opt_int;
}
}
#ifdef HAVE_STRUCT_IP_MREQ