X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Faccept.c;h=8775aaee2d8c5305c342fbaa757db4a5e5ec77ac;hb=585a8dcf51a46cd9965c6881cfff6eddbae06d48;hp=a68f7dcfc0d686860bcf8a7569f099910f988f9f;hpb=9d9884325418a9298e6ed18383f0175ed885ffa3;p=gnulib.git diff --git a/lib/accept.c b/lib/accept.c index a68f7dcfc..8775aaee2 100644 --- a/lib/accept.c +++ b/lib/accept.c @@ -1,6 +1,6 @@ /* accept.c --- wrappers for Windows accept function - Copyright (C) 2008-2010 Free Software Foundation, Inc. + Copyright (C) 2008-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,12 +31,22 @@ int rpl_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) { - SOCKET fh = accept (FD_TO_SOCKET (fd), addr, addrlen); - if (fh == INVALID_SOCKET) + SOCKET sock = FD_TO_SOCKET (fd); + + if (sock == INVALID_SOCKET) { - set_winsock_errno (); + errno = EBADF; return -1; } else - return SOCKET_TO_FD (fh); + { + SOCKET fh = accept (sock, addr, addrlen); + if (fh == INVALID_SOCKET) + { + set_winsock_errno (); + return -1; + } + else + return SOCKET_TO_FD (fh); + } }