bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] implement full-blown select(2) for winsock


From: Bruno Haible
Subject: Re: [PATCH] implement full-blown select(2) for winsock
Date: Mon, 6 Oct 2008 02:14:45 +0200
User-agent: KMail/1.5.4

And this implements the modules for most of the functions from <sys/socket.h>.

The functions 'ioctl' and 'close' are not handled in this patch; they are a
little more complicated.

2008-10-05  Bruno Haible  <address@hidden>

        * modules/accept: New file.
        * modules/bind: New file.
        * modules/connect: New file.
        * modules/getpeername: New file.
        * modules/getsockname: New file.
        * modules/getsockopt: New file.
        * modules/listen: New file.
        * modules/recv: New file.
        * modules/recvfrom: New file.
        * modules/send: New file.
        * modules/sendto: New file.
        * modules/setsockopt: New file.
        * modules/socket: New file.
        * lib/sys_socket.in.h: Include the GL_LINK_WARNING definition.
        (socket, connect, accept, bind, getpeername, getsockname, getsockopt,
        listen, recv, send, recvfrom, sendto, setsockopt): Declare only when
        the particular module is requested. Add a link warning when the
        particular module is not requested.
        * lib/winsock.c (rpl_socket, rpl_connect, rpl_accept, rpl_bind,
        rpl_getpeername, rpl_getsockname, rpl_getsockopt, rpl_listen, rpl_recv,
        rpl_send, rpl_recvfrom, rpl_sendto, rpl_setsockopt): Define only when
        the particular module is requested.
        * m4/sys_socket_h.m4 (gl_SYS_SOCKET_MODULE_INDICATOR,
        gl_SYS_SOCKET_H_DEFAULTS): New macros.
        (gl_HEADER_SYS_SOCKET): Require gl_SYS_SOCKET_H_DEFAULTS.
        * modules/sys_socket (Depends-on): Add link-warning.
        (Makeifle.am): Substitute GNULIB_SOCKET, GNULIB_CONNECT, GNULIB_ACCEPT,
        GNULIB_BIND, GNULIB_GETPEERNAME, GNULIB_GETSOCKNAME, GNULIB_GETSOCKOPT,
        GNULIB_LISTEN, GNULIB_RECV, GNULIB_SEND, GNULIB_RECVFROM,
        GNULIB_SENDTO, GNULIB_SETSOCKOPT, and the definition of
        GL_LINK_WARNING.
        * doc/posix-functions/accept.texi: Mention the new module 'accept'.
        * doc/posix-functions/bind.texi: Mention the new module 'bind'.
        * doc/posix-functions/connect.texi: Mention the new module 'connect'.
        * doc/posix-functions/getpeername.texi: Mention the new module
        'getpeername'.
        * doc/posix-functions/getsockname.texi: Mention the new module
        'getsockname'.
        * doc/posix-functions/getsockopt.texi: Mention the new module
        'getsockopt'.
        * doc/posix-functions/listen.texi: Mention the new module 'listen'.
        * doc/posix-functions/recv.texi: Mention the new module 'recv'.
        * doc/posix-functions/recvfrom.texi: Mention the new module 'recvfrom'.
        * doc/posix-functions/send.texi: Mention the new module 'send'.
        * doc/posix-functions/sendto.texi: Mention the new module 'sendto'.
        * doc/posix-functions/setsockopt.texi: Mention the new module
        'setsockopt'.
        * doc/posix-functions/socket.texi: Mention the new module 'socket'.
        * modules/poll-tests (Depends-on): Add socket, bind, getsockopt,
        listen, connect, accept.
        * modules/select-tests (Depends-on): Likewise.

=============================== modules/accept ==============================
Description:
accept() function: accept a connection to a server socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([accept])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/bind ================================
Description:
bind() function: bind a server socket to a port.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([bind])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/connect =============================
Description:
connect() function: connect a client socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([connect])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/getpeername =========================
Description:
getpeername() function: return information about the remote end of a connected
socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([getpeername])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/getsockname =========================
Description:
getsockname() function: return information about the local end of a connected
socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([getsockname])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/getsockopt ==========================
Description:
getsockopt() function: retrieve optional settings on a socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([getsockopt])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/listen ==============================
Description:
listen() function: make a server socket ready for accepting connections.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([listen])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/recv ================================
Description:
recv() function: receive (read) data from a connected socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([recv])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/recvfrom ============================
Description:
recvfrom() function: receive (read) data from a potentially unconnected socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([recvfrom])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/send ================================
Description:
send() function: send (write) data to a connected socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([send])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/sendto ==============================
Description:
sendto() function: send (write) data to a potentially unconnected socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([sendto])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/setsockopt ==========================
Description:
setsockopt() function: specify optional settings on a socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([setsockopt])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================== modules/socket ==============================
Description:
socket() function: create a socket.

Files:
lib/winsock.c

Depends-on:
sys_socket
errno

configure.ac:
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
if test "$ac_cv_header_winsock2_h" = yes; then
  AC_LIBOBJ([winsock])
fi
gl_SYS_SOCKET_MODULE_INDICATOR([socket])

Makefile.am:

Include:
<sys/socket.h>

License:
LGPLv2+

Maintainer:
Paolo Bonzini, Simon Josefsson
=============================================================================
*** lib/sys_socket.in.h.orig    2008-10-06 01:55:27.000000000 +0200
--- lib/sys_socket.in.h 2008-10-06 01:50:55.000000000 +0200
***************
*** 98,103 ****
--- 98,105 ----
  #  define SHUT_RDWR SD_BOTH
  # endif
  
+ /* The definition of GL_LINK_WARNING is copied here.  */
+ 
  # if @HAVE_WINSOCK2_H@
  /* Include headers needed by the emulation code.  */
  #  include <sys/types.h>
***************
*** 105,113 ****
  
  typedef int socklen_t;
  
! #  ifdef __cplusplus
  extern "C" {
! #  endif
  
  /* Re-define FD_ISSET to avoid a WSA call while we are not using
     network sockets.  */
--- 107,119 ----
  
  typedef int socklen_t;
  
! # endif
! 
! # ifdef __cplusplus
  extern "C" {
! # endif
! 
! # if @HAVE_WINSOCK2_H@
  
  /* Re-define FD_ISSET to avoid a WSA call while we are not using
     network sockets.  */
***************
*** 128,189 ****
  #  undef FD_ISSET
  #  define FD_ISSET(fd, set) rpl_fd_isset(fd, set)
  
  /* Wrap everything else to use libc file descriptors for sockets.  */
  
  #  undef close
  #  define close                       rpl_close
  #  undef socket
! #  define socket              rpl_socket
  #  undef connect
! #  define connect             rpl_connect
  #  undef accept
! #  define accept              rpl_accept
  #  undef bind
! #  define bind                        rpl_bind
  #  undef getpeername
! #  define getpeername         rpl_getpeername
  #  undef getsockname
! #  define getsockname         rpl_getsockname
  #  undef getsockopt
! #  define getsockopt          rpl_getsockopt
  #  undef listen
! #  define listen              rpl_listen
  #  undef ioctl
  #  define ioctl                       rpl_ioctl
  #  undef recv
! #  define recv                        rpl_recv
  #  undef send
! #  define send                        rpl_send
  #  undef recvfrom
! #  define recvfrom            rpl_recvfrom
  #  undef sendto
! #  define sendto              rpl_sendto
  #  undef setsockopt
! #  define setsockopt          rpl_setsockopt
  #  undef select
  #  define select              select_used_without_including_sys_select_h
  
! extern int rpl_close(int);
! extern int rpl_socket (int, int, int protocol);
! extern int rpl_connect (int, struct sockaddr *, int);
! extern int rpl_accept (int, struct sockaddr *, int *);
! extern int rpl_bind (int, struct sockaddr *, int);
! extern int rpl_getpeername (int, struct sockaddr *, int *);
! extern int rpl_getsockname (int, struct sockaddr *, int *);
! extern int rpl_getsockopt (int, int, int, void *, int *);
! extern int rpl_listen (int, int);
! extern int rpl_ioctl (int, unsigned long, char *);
! extern int rpl_recv (int, void *, int, int);
! extern int rpl_send (int, const void *, int, int);
! extern int rpl_recvfrom (int, void *, int, int, struct sockaddr *, int *);
! extern int rpl_sendto (int, const void *, int, int, struct sockaddr *, int);
! extern int rpl_setsockopt (int, int, int, const void *, int);
! 
! #  ifdef __cplusplus
  }
! #  endif
! 
! # endif /* HAVE_WINSOCK2_H */
  
  #endif /* HAVE_SYS_SOCKET_H */
  
--- 134,384 ----
  #  undef FD_ISSET
  #  define FD_ISSET(fd, set) rpl_fd_isset(fd, set)
  
+ # endif
+ 
  /* Wrap everything else to use libc file descriptors for sockets.  */
  
+ # if @HAVE_WINSOCK2_H@
  #  undef close
  #  define close                       rpl_close
+ extern int rpl_close(int);
+ # endif
+ 
+ # if @GNULIB_SOCKET@
+ #  if @HAVE_WINSOCK2_H@
+ #   undef socket
+ #   define socket             rpl_socket
+ extern int rpl_socket (int, int, int protocol);
+ #  endif
+ # elif @HAVE_WINSOCK2_H@
  #  undef socket
! #  define socket socket_used_without_requesting_gnulib_module_socket
! # elif defined GNULIB_POSIXCHECK
! #  undef socket
! #  define socket(d,t,p) \
!      (GL_LINK_WARNING ("socket is not always POSIX compliant - " \
!                        "use gnulib module socket for portability"), \
!       socket (d, t, p))
! # endif
! 
! # if @GNULIB_CONNECT@
! #  if @HAVE_WINSOCK2_H@
! #   undef connect
! #   define connect            rpl_connect
! extern int rpl_connect (int, struct sockaddr *, int);
! #  endif
! # elif @HAVE_WINSOCK2_H@
  #  undef connect
! #  define connect socket_used_without_requesting_gnulib_module_connect
! # elif defined GNULIB_POSIXCHECK
! #  undef connect
! #  define connect(s,a,l) \
!      (GL_LINK_WARNING ("connect is not always POSIX compliant - " \
!                        "use gnulib module connect for portability"), \
!       connect (s, a, l))
! # endif
! 
! # if @GNULIB_ACCEPT@
! #  if @HAVE_WINSOCK2_H@
! #   undef accept
! #   define accept             rpl_accept
! extern int rpl_accept (int, struct sockaddr *, int *);
! #  endif
! # elif @HAVE_WINSOCK2_H@
! #  undef accept
! #  define accept accept_used_without_requesting_gnulib_module_accept
! # elif defined GNULIB_POSIXCHECK
  #  undef accept
! #  define accept(s,a,l) \
!      (GL_LINK_WARNING ("accept is not always POSIX compliant - " \
!                        "use gnulib module accept for portability"), \
!       accept (s, a, l))
! # endif
! 
! # if @GNULIB_BIND@
! #  if @HAVE_WINSOCK2_H@
! #   undef bind
! #   define bind                       rpl_bind
! extern int rpl_bind (int, struct sockaddr *, int);
! #  endif
! # elif @HAVE_WINSOCK2_H@
  #  undef bind
! #  define bind bind_used_without_requesting_gnulib_module_bind
! # elif defined GNULIB_POSIXCHECK
! #  undef bind
! #  define bind(s,a,l) \
!      (GL_LINK_WARNING ("bind is not always POSIX compliant - " \
!                        "use gnulib module bind for portability"), \
!       bind (s, a, l))
! # endif
! 
! # if @GNULIB_GETPEERNAME@
! #  if @HAVE_WINSOCK2_H@
! #   undef getpeername
! #   define getpeername                rpl_getpeername
! extern int rpl_getpeername (int, struct sockaddr *, int *);
! #  endif
! # elif @HAVE_WINSOCK2_H@
! #  undef getpeername
! #  define getpeername 
getpeername_used_without_requesting_gnulib_module_getpeername
! # elif defined GNULIB_POSIXCHECK
  #  undef getpeername
! #  define getpeername(s,a,l) \
!      (GL_LINK_WARNING ("getpeername is not always POSIX compliant - " \
!                        "use gnulib module getpeername for portability"), \
!       getpeername (s, a, l))
! # endif
! 
! # if @GNULIB_GETSOCKNAME@
! #  if @HAVE_WINSOCK2_H@
! #   undef getsockname
! #   define getsockname                rpl_getsockname
! extern int rpl_getsockname (int, struct sockaddr *, int *);
! #  endif
! # elif @HAVE_WINSOCK2_H@
! #  undef getsockname
! #  define getsockname 
getsockname_used_without_requesting_gnulib_module_getsockname
! # elif defined GNULIB_POSIXCHECK
  #  undef getsockname
! #  define getsockname(s,a,l) \
!      (GL_LINK_WARNING ("getsockname is not always POSIX compliant - " \
!                        "use gnulib module getsockname for portability"), \
!       getsockname (s, a, l))
! # endif
! 
! # if @GNULIB_GETSOCKOPT@
! #  if @HAVE_WINSOCK2_H@
! #   undef getsockopt
! #   define getsockopt         rpl_getsockopt
! extern int rpl_getsockopt (int, int, int, void *, int *);
! #  endif
! # elif @HAVE_WINSOCK2_H@
! #  undef getsockopt
! #  define getsockopt 
getsockopt_used_without_requesting_gnulib_module_getsockopt
! # elif defined GNULIB_POSIXCHECK
  #  undef getsockopt
! #  define getsockopt(s,lvl,o,v,l) \
!      (GL_LINK_WARNING ("getsockopt is not always POSIX compliant - " \
!                        "use gnulib module getsockopt for portability"), \
!       getsockopt (s, lvl, o, v, l))
! # endif
! 
! # if @GNULIB_LISTEN@
! #  if @HAVE_WINSOCK2_H@
! #   undef listen
! #   define listen             rpl_listen
! extern int rpl_listen (int, int);
! #  endif
! # elif @HAVE_WINSOCK2_H@
! #  undef listen
! #  define listen listen_used_without_requesting_gnulib_module_listen
! # elif defined GNULIB_POSIXCHECK
  #  undef listen
! #  define listen(s,b) \
!      (GL_LINK_WARNING ("listen is not always POSIX compliant - " \
!                        "use gnulib module listen for portability"), \
!       listen (s, b))
! # endif
! 
! # if @HAVE_WINSOCK2_H@
  #  undef ioctl
  #  define ioctl                       rpl_ioctl
+ extern int rpl_ioctl (int, unsigned long, char *);
+ # endif
+ 
+ # if @GNULIB_RECV@
+ #  if @HAVE_WINSOCK2_H@
+ #   undef recv
+ #   define recv                       rpl_recv
+ extern int rpl_recv (int, void *, int, int);
+ #  endif
+ # elif @HAVE_WINSOCK2_H@
  #  undef recv
! #  define recv recv_used_without_requesting_gnulib_module_recv
! # elif defined GNULIB_POSIXCHECK
! #  undef recv
! #  define recv(s,b,n,f) \
!      (GL_LINK_WARNING ("recv is not always POSIX compliant - " \
!                        "use gnulib module recv for portability"), \
!       recv (s, b, n, f))
! # endif
! 
! # if @GNULIB_SEND@
! #  if @HAVE_WINSOCK2_H@
! #   undef send
! #   define send                       rpl_send
! extern int rpl_send (int, const void *, int, int);
! #  endif
! # elif @HAVE_WINSOCK2_H@
! #  undef send
! #  define send send_used_without_requesting_gnulib_module_send
! # elif defined GNULIB_POSIXCHECK
  #  undef send
! #  define send(s,b,n,f) \
!      (GL_LINK_WARNING ("send is not always POSIX compliant - " \
!                        "use gnulib module send for portability"), \
!       send (s, b, n, f))
! # endif
! 
! # if @GNULIB_RECVFROM@
! #  if @HAVE_WINSOCK2_H@
! #   undef recvfrom
! #   define recvfrom           rpl_recvfrom
! extern int rpl_recvfrom (int, void *, int, int, struct sockaddr *, int *);
! #  endif
! # elif @HAVE_WINSOCK2_H@
  #  undef recvfrom
! #  define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom
! # elif defined GNULIB_POSIXCHECK
! #  undef recvfrom
! #  define recvfrom(s,b,n,f,a,l) \
!      (GL_LINK_WARNING ("recvfrom is not always POSIX compliant - " \
!                        "use gnulib module recvfrom for portability"), \
!       recvfrom (s, b, n, f, a, l))
! # endif
! 
! # if @GNULIB_SENDTO@
! #  if @HAVE_WINSOCK2_H@
! #   undef sendto
! #   define sendto             rpl_sendto
! extern int rpl_sendto (int, const void *, int, int, struct sockaddr *, int);
! #  endif
! # elif @HAVE_WINSOCK2_H@
! #  undef sendto
! #  define sendto sendto_used_without_requesting_gnulib_module_sendto
! # elif defined GNULIB_POSIXCHECK
  #  undef sendto
! #  define sendto(s,b,n,f,a,l) \
!      (GL_LINK_WARNING ("sendto is not always POSIX compliant - " \
!                        "use gnulib module sendto for portability"), \
!       sendto (s, b, n, f, a, l))
! # endif
! 
! # if @GNULIB_SETSOCKOPT@
! #  if @HAVE_WINSOCK2_H@
! #   undef setsockopt
! #   define setsockopt         rpl_setsockopt
! extern int rpl_setsockopt (int, int, int, const void *, int);
! #  endif
! # elif @HAVE_WINSOCK2_H@
! #  undef setsockopt
! #  define setsockopt 
setsockopt_used_without_requesting_gnulib_module_setsockopt
! # elif defined GNULIB_POSIXCHECK
  #  undef setsockopt
! #  define setsockopt(s,lvl,o,v,l) \
!      (GL_LINK_WARNING ("setsockopt is not always POSIX compliant - " \
!                        "use gnulib module setsockopt for portability"), \
!       setsockopt (s, lvl, o, v, l))
! # endif
! 
! # if @HAVE_WINSOCK2_H@
  #  undef select
  #  define select              select_used_without_including_sys_select_h
+ # endif
  
! # ifdef __cplusplus
  }
! # endif
  
  #endif /* HAVE_SYS_SOCKET_H */
  
*** lib/winsock.c.orig  2008-10-06 01:55:27.000000000 +0200
--- lib/winsock.c       2008-10-06 01:50:55.000000000 +0200
***************
*** 104,109 ****
--- 104,110 ----
      }
  }
  
+ #if GNULIB_SOCKET
  int
  rpl_socket (int domain, int type, int protocol)
  {
***************
*** 119,126 ****
    else
      return SOCKET_TO_FD (fh);
  }
  
! 
  int
  rpl_connect (int fd, struct sockaddr *sockaddr, int len)
  {
--- 120,128 ----
    else
      return SOCKET_TO_FD (fh);
  }
+ #endif
  
! #if GNULIB_CONNECT
  int
  rpl_connect (int fd, struct sockaddr *sockaddr, int len)
  {
***************
*** 138,144 ****
--- 140,148 ----
  
    return r;
  }
+ #endif
  
+ #if GNULIB_ACCEPT
  int
  rpl_accept (int fd, struct sockaddr *addr, int *addrlen)
  {
***************
*** 151,157 ****
--- 155,163 ----
    else
      return SOCKET_TO_FD (fh);
  }
+ #endif
  
+ #if GNULIB_BIND
  int
  rpl_bind (int fd, struct sockaddr *sockaddr, int len)
  {
***************
*** 162,168 ****
--- 168,176 ----
  
    return r;
  }
+ #endif
  
+ #if GNULIB_GETPEERNAME
  int
  rpl_getpeername (int fd, struct sockaddr *addr, int *addrlen)
  {
***************
*** 173,179 ****
--- 181,189 ----
  
    return r;
  }
+ #endif
  
+ #if GNULIB_GETSOCKNAME
  int
  rpl_getsockname (int fd, struct sockaddr *addr, int *addrlen)
  {
***************
*** 184,190 ****
--- 194,202 ----
  
    return r;
  }
+ #endif
  
+ #if GNULIB_GETSOCKOPT
  int
  rpl_getsockopt (int fd, int level, int optname, void *optval, int *optlen)
  {
***************
*** 195,201 ****
--- 207,215 ----
  
    return r;
  }
+ #endif
  
+ #if GNULIB_LISTEN
  int
  rpl_listen (int fd, int backlog)
  {
***************
*** 206,211 ****
--- 220,226 ----
  
    return r;
  }
+ #endif
  
  int
  rpl_ioctl (int fd, unsigned long req, char *buf)
***************
*** 218,223 ****
--- 233,239 ----
    return r;
  }
  
+ #if GNULIB_RECV
  int
  rpl_recv (int fd, void *buf, int len, int flags)
  {
***************
*** 228,234 ****
--- 244,252 ----
  
    return r;
  }
+ #endif
  
+ #if GNULIB_SEND
  int
  rpl_send (int fd, const void *buf, int len, int flags)
  {
***************
*** 239,245 ****
--- 257,265 ----
  
    return r;
  }
+ #endif
  
+ #if GNULIB_RECVFROM
  int
  rpl_recvfrom (int fd, void *buf, int len, int flags, struct sockaddr *from,
              int *fromlen)
***************
*** 258,264 ****
--- 278,286 ----
  
    return r;
  }
+ #endif
  
+ #if GNULIB_SENDTO
  int
  rpl_sendto (int fd, const void *buf, int len, int flags,
            struct sockaddr *to, int tolen)
***************
*** 270,276 ****
--- 292,300 ----
  
    return r;
  }
+ #endif
  
+ #if GNULIB_SETSOCKOPT
  int
  rpl_setsockopt (int fd, int level, int optname, const void *optval, int 
optlen)
  {
***************
*** 281,283 ****
--- 305,308 ----
  
    return r;
  }
+ #endif
*** m4/sys_socket_h.m4.orig     2008-10-06 01:55:28.000000000 +0200
--- m4/sys_socket_h.m4  2008-10-06 01:50:55.000000000 +0200
***************
*** 1,4 ****
! # sys_socket_h.m4 serial 7
  dnl Copyright (C) 2005-2008 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # sys_socket_h.m4 serial 8
  dnl Copyright (C) 2005-2008 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
***************
*** 8,13 ****
--- 8,14 ----
  
  AC_DEFUN([gl_HEADER_SYS_SOCKET],
  [
+   AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
    AC_REQUIRE([AC_C_INLINE])
  
    AC_CACHE_CHECK([whether <sys/socket.h> is self-contained],
***************
*** 88,90 ****
--- 89,116 ----
    fi
    AC_SUBST([HAVE_WINSOCK2_H])
  ])
+ 
+ AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR],
+ [
+   dnl Use AC_REQUIRE here, so that the default settings are expanded once 
only.
+   AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
+   
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+   gl_MODULE_INDICATOR([$1])
+ ])
+ 
+ AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS],
+ [
+   GNULIB_SOCKET=0;      AC_SUBST([GNULIB_SOCKET])
+   GNULIB_CONNECT=0;     AC_SUBST([GNULIB_CONNECT])
+   GNULIB_ACCEPT=0;      AC_SUBST([GNULIB_ACCEPT])
+   GNULIB_BIND=0;        AC_SUBST([GNULIB_BIND])
+   GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME])
+   GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME])
+   GNULIB_GETSOCKOPT=0;  AC_SUBST([GNULIB_GETSOCKOPT])
+   GNULIB_LISTEN=0;      AC_SUBST([GNULIB_LISTEN])
+   GNULIB_RECV=0;        AC_SUBST([GNULIB_RECV])
+   GNULIB_SEND=0;        AC_SUBST([GNULIB_SEND])
+   GNULIB_RECVFROM=0;    AC_SUBST([GNULIB_RECVFROM])
+   GNULIB_SENDTO=0;      AC_SUBST([GNULIB_SENDTO])
+   GNULIB_SETSOCKOPT=0;  AC_SUBST([GNULIB_SETSOCKOPT])
+ ])
*** modules/sys_socket.orig     2008-10-06 01:55:28.000000000 +0200
--- modules/sys_socket  2008-10-06 01:55:24.000000000 +0200
***************
*** 9,14 ****
--- 9,15 ----
  
  Depends-on:
  include_next
+ link-warning
  errno
  
  configure.ac:
***************
*** 27,34 ****
--- 28,49 ----
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \
              -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \
+             -e 's|@''GNULIB_SOCKET''@|$(GNULIB_SOCKET)|g' \
+             -e 's|@''GNULIB_CONNECT''@|$(GNULIB_CONNECT)|g' \
+             -e 's|@''GNULIB_ACCEPT''@|$(GNULIB_ACCEPT)|g' \
+             -e 's|@''GNULIB_BIND''@|$(GNULIB_BIND)|g' \
+             -e 's|@''GNULIB_GETPEERNAME''@|$(GNULIB_GETPEERNAME)|g' \
+             -e 's|@''GNULIB_GETSOCKNAME''@|$(GNULIB_GETSOCKNAME)|g' \
+             -e 's|@''GNULIB_GETSOCKOPT''@|$(GNULIB_GETSOCKOPT)|g' \
+             -e 's|@''GNULIB_LISTEN''@|$(GNULIB_LISTEN)|g' \
+             -e 's|@''GNULIB_RECV''@|$(GNULIB_RECV)|g' \
+             -e 's|@''GNULIB_SEND''@|$()GNULIB_SEND|g' \
+             -e 's|@''GNULIB_RECVFROM''@|$(GNULIB_RECVFROM)|g' \
+             -e 's|@''GNULIB_SENDTO''@|$(GNULIB_SENDTO)|g' \
+             -e 's|@''GNULIB_SETSOCKOPT''@|$(GNULIB_SETSOCKOPT)|g' \
              -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
              -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
+             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
              < $(srcdir)/sys_socket.in.h; \
        } > address@hidden
        mv -f address@hidden $@
*** doc/posix-functions/accept.texi.orig        2008-10-06 01:55:27.000000000 
+0200
--- doc/posix-functions/accept.texi     2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/accept.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/accept.html}
  
! Gnulib module: accept
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/bind.texi.orig  2008-10-06 01:55:27.000000000 +0200
--- doc/posix-functions/bind.texi       2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/bind.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/bind.html}
  
! Gnulib module: bind
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/connect.texi.orig       2008-10-06 01:55:27.000000000 
+0200
--- doc/posix-functions/connect.texi    2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/connect.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/connect.html}
  
! Gnulib module: connect
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/getpeername.texi.orig   2008-10-06 01:55:27.000000000 
+0200
--- doc/posix-functions/getpeername.texi        2008-10-06 01:50:55.000000000 
+0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/getpeername.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/getpeername.html}
  
! Gnulib module: getpeername
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/getsockname.texi.orig   2008-10-06 01:55:27.000000000 
+0200
--- doc/posix-functions/getsockname.texi        2008-10-06 01:50:55.000000000 
+0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/getsockname.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/getsockname.html}
  
! Gnulib module: getsockname
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/getsockopt.texi.orig    2008-10-06 01:55:27.000000000 
+0200
--- doc/posix-functions/getsockopt.texi 2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/getsockopt.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/getsockopt.html}
  
! Gnulib module: getsockopt
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/listen.texi.orig        2008-10-06 01:55:27.000000000 
+0200
--- doc/posix-functions/listen.texi     2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/listen.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/listen.html}
  
! Gnulib module: listen
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/recv.texi.orig  2008-10-06 01:55:27.000000000 +0200
--- doc/posix-functions/recv.texi       2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/recv.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/recv.html}
  
! Gnulib module: recv
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/recvfrom.texi.orig      2008-10-06 01:55:27.000000000 
+0200
--- doc/posix-functions/recvfrom.texi   2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/recvfrom.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/recvfrom.html}
  
! Gnulib module: recvfrom
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/send.texi.orig  2008-10-06 01:55:27.000000000 +0200
--- doc/posix-functions/send.texi       2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/send.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/send.html}
  
! Gnulib module: send
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/sendto.texi.orig        2008-10-06 01:55:27.000000000 
+0200
--- doc/posix-functions/sendto.texi     2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/sendto.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/sendto.html}
  
! Gnulib module: sendto
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/setsockopt.texi.orig    2008-10-06 01:55:27.000000000 
+0200
--- doc/posix-functions/setsockopt.texi 2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/setsockopt.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/setsockopt.html}
  
! Gnulib module: setsockopt
  
  Portability problems fixed by Gnulib:
  @itemize
*** doc/posix-functions/socket.texi.orig        2008-10-06 01:55:27.000000000 
+0200
--- doc/posix-functions/socket.texi     2008-10-06 01:50:55.000000000 +0200
***************
*** 4,10 ****
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/socket.html}
  
! Gnulib module: sys_socket
  
  Portability problems fixed by Gnulib:
  @itemize
--- 4,10 ----
  
  POSIX specification: @url{http://www.opengroup.org/susv3xsh/socket.html}
  
! Gnulib module: socket
  
  Portability problems fixed by Gnulib:
  @itemize
*** modules/poll-tests.orig     2008-10-06 01:55:28.000000000 +0200
--- modules/poll-tests  2008-10-06 01:50:55.000000000 +0200
***************
*** 11,16 ****
--- 11,22 ----
  errno
  perror
  sockets
+ socket
+ bind
+ setsockopt
+ listen
+ connect
+ accept
  
  configure.ac:
  AC_CHECK_HEADERS_ONCE([unistd.h sys/wait.h])
*** modules/select-tests.orig   2008-10-06 01:55:28.000000000 +0200
--- modules/select-tests        2008-10-06 01:50:55.000000000 +0200
***************
*** 10,15 ****
--- 10,21 ----
  errno
  perror
  sockets
+ socket
+ bind
+ setsockopt
+ listen
+ connect
+ accept
  
  configure.ac:
  





reply via email to

[Prev in Thread] Current Thread [Next in Thread]