mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-29 19:30:36 +02:00
Changes from arch/CVS synchronization
This commit is contained in:
parent
1317062f0b
commit
7d1fc87217
4 changed files with 36 additions and 1 deletions
|
@ -1,3 +1,11 @@
|
|||
2007-12-04 Ludovic Courtès <ludo@gnu.org>
|
||||
|
||||
* NEWS: Mention `accept' bug fix.
|
||||
|
||||
2007-12-03 Ludovic Courtès <ludo@gnu.org>
|
||||
|
||||
* NEWS: Add SRFI-69.
|
||||
|
||||
2007-10-24 Neil Jerram <neil@ossau.uklinux.net>
|
||||
|
||||
* .cvsignore: Add "lib".
|
||||
|
|
5
NEWS
5
NEWS
|
@ -43,6 +43,11 @@ Changes in 1.8.4 (since 1.8.3)
|
|||
** CR (ASCII 0x0d) is (again) recognized as a token delimiter by the reader
|
||||
** Fixed a segmentation fault which occurred when displaying the
|
||||
backtrace of a stack with a promise object (made by `delay') in it.
|
||||
** Make `accept' leave guile mode while blocking
|
||||
|
||||
* New modules (see the manual for details)
|
||||
|
||||
** `(srfi srfi-69)'
|
||||
|
||||
|
||||
Changes in 1.8.3 (since 1.8.2)
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2007-12-04 Ludovic Courtès <ludo@gnu.org>
|
||||
|
||||
* socket.c (scm_accept): Leave guile mode using
|
||||
`scm_std_select ()' before calling `accept(2)'. Reported by
|
||||
dskr <dskr@mac.com>.
|
||||
|
||||
2007-10-27 Ludovic Courtès <ludo@gnu.org>
|
||||
|
||||
* fports.c (scm_i_evict_port): Expect a port, rather than a pair
|
||||
|
|
|
@ -36,6 +36,8 @@
|
|||
#include "libguile/validate.h"
|
||||
#include "libguile/socket.h"
|
||||
|
||||
#include "libguile/iselect.h"
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#include "win32-socket.h"
|
||||
#endif
|
||||
|
@ -1321,16 +1323,30 @@ SCM_DEFINE (scm_accept, "accept", 1, 0, 0,
|
|||
"connection and will continue to accept new requests.")
|
||||
#define FUNC_NAME s_scm_accept
|
||||
{
|
||||
int fd;
|
||||
int fd, selected;
|
||||
int newfd;
|
||||
SCM address;
|
||||
SCM newsock;
|
||||
SELECT_TYPE readfds, exceptfds;
|
||||
socklen_t addr_size = MAX_ADDR_SIZE;
|
||||
scm_t_max_sockaddr addr;
|
||||
|
||||
sock = SCM_COERCE_OUTPORT (sock);
|
||||
SCM_VALIDATE_OPFPORT (1, sock);
|
||||
fd = SCM_FPORT_FDES (sock);
|
||||
|
||||
FD_ZERO (&readfds);
|
||||
FD_ZERO (&exceptfds);
|
||||
FD_SET (fd, &readfds);
|
||||
FD_SET (fd, &exceptfds);
|
||||
|
||||
/* Block until something happens on FD, leaving guile mode while
|
||||
waiting. */
|
||||
selected = scm_std_select (fd + 1, &readfds, NULL, &exceptfds,
|
||||
NULL);
|
||||
if (selected < 0)
|
||||
SCM_SYSERROR;
|
||||
|
||||
newfd = accept (fd, (struct sockaddr *) &addr, &addr_size);
|
||||
if (newfd == -1)
|
||||
SCM_SYSERROR;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue