libexplain  1.4.D001
libexplain/accept4_or_die.c
Go to the documentation of this file.
00001 /*
00002  * libexplain - Explain errno values returned by libc functions
00003  * Copyright (C) 2009, 2010, 2012, 2013 Peter Miller
00004  *
00005  * This program is free software; you can redistribute it and/or modify it
00006  * under the terms of the GNU Lesser General Public License as published by
00007  * the Free Software Foundation; either version 3 of the License, or (at
00008  * your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,but
00011  * WITHOUT ANY WARRANTY; without even the implied warranty
00012  * ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNULesser
00013  * General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU Lesser General Public License
00016  * along with this program. If not, see <http://www.gnu.org/licenses/>.
00017  */
00018 
00019 #include <libexplain/ac/errno.h>
00020 #include <libexplain/ac/sys/socket.h>
00021 
00022 #include <libexplain/accept4.h>
00023 #include <libexplain/output.h>
00024 
00025 
00026 int
00027 explain_accept4_on_error(int fildes, struct sockaddr *sock_addr,
00028     socklen_t *sock_addr_size, int flags)
00029 {
00030     int             result;
00031 
00032 #ifdef HAVE_ACCEPT4
00033     result = accept4(fildes, sock_addr, sock_addr_size, flags);
00034 #else
00035     result = -1;
00036     errno = ENOSYS;
00037 #endif
00038     if (result < 0)
00039     {
00040         int             hold_errno;
00041 
00042         hold_errno = errno;
00043         explain_output_error
00044         (
00045             "%s",
00046             explain_errno_accept4
00047             (
00048                 hold_errno,
00049                 fildes,
00050                 sock_addr,
00051                 sock_addr_size,
00052                 flags
00053             )
00054         );
00055         errno = hold_errno;
00056     }
00057     return result;
00058 }
00059 
00060 
00061 int
00062 explain_accept4_or_die(int fildes, struct sockaddr *sock_addr, socklen_t
00063     *sock_addr_size, int flags)
00064 {
00065     int             result;
00066 
00067     result = explain_accept4_on_error(fildes, sock_addr, sock_addr_size, flags);
00068     if (result < 0)
00069     {
00070         explain_output_exit_failure();
00071     }
00072     return result;
00073 }
00074 
00075 
00076 /* vim: set ts=8 sw=4 et : */