/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2009, Dave Pare, Jeff Bailey, Thomas Ruschak,
- * Ken Stevens, Steve McClure
+ * Copyright (C) 1986-2013, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Ken Stevens, Steve McClure, Markus Armbruster
*
- * This program is free software; you can redistribute it and/or modify
+ * Empire is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* ---
*
* w32sockets.c: POSIX socket emulation layer for Windows
*
* Known contributors to this file:
- * Ron Koenderink, 2007
- * Markus Armbruster, 2007-2009
+ * Ron Koenderink, 2007-2010
+ * Markus Armbruster, 2007-2010
*/
/*
fd_is_socket(int fd, SOCKET *sockp)
{
SOCKET sock;
- WSANETWORKEVENTS ev;
+ BOOL val;
+ int size = sizeof(val);
sock = W32_FD_TO_SOCKET(fd);
if (sockp)
*sockp = sock;
- return WSAEnumNetworkEvents(sock, NULL, &ev) == 0;
+ return getsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&val, &size)
+ == 0;
}
void
w32_set_winsock_errno(void)
{
- int err = WSAGetLastError();
- WSASetLastError(0);
+ int err = WSAGetLastError();
+ WSASetLastError(0);
- /* Map some WSAE* errors to the runtime library's error codes. */
- switch (err)
- {
+ /* Map some WSAE* errors to the runtime library's error codes. */
+ switch (err) {
case WSA_INVALID_HANDLE:
- errno = EBADF;
- break;
+ errno = EBADF;
+ break;
case WSA_NOT_ENOUGH_MEMORY:
- errno = ENOMEM;
- break;
+ errno = ENOMEM;
+ break;
case WSA_INVALID_PARAMETER:
- errno = EINVAL;
- break;
+ errno = EINVAL;
+ break;
case WSAEWOULDBLOCK:
- errno = EAGAIN;
- break;
+ errno = EAGAIN;
+ break;
case WSAENAMETOOLONG:
- errno = ENAMETOOLONG;
- break;
+ errno = ENAMETOOLONG;
+ break;
case WSAENOTEMPTY:
- errno = ENOTEMPTY;
- break;
+ errno = ENOTEMPTY;
+ break;
default:
- errno = (err > 10000 && err < 10025) ? err - 10000 : err;
- break;
+ errno = (err > 10000 && err < 10025) ? err - 10000 : err;
+ break;
}
}
unsigned long nonblocking;
SOCKET sock;
- switch (cmd)
- {
+ switch (cmd) {
case F_GETFL:
return 0;
case F_SETFL: