(tcp_listen, posix_setsockopt) [_WIN32]: Move the special

SO_REUSEADDR code for _WIN32 from tcp_listen() to
posix_setsockopt().

[_WIN32] (posix_open): Switch to _sopen() for _sopen_s() as MinGW
does not support _sopen_s() yet.

[_WIN32] (posix_fd2socket): Fix typo.
This commit is contained in:
Ron Koenderink 2007-08-17 03:11:45 +00:00
parent b892774785
commit 01625ead8c
2 changed files with 18 additions and 18 deletions

View file

@ -77,19 +77,8 @@ tcp_listen(char *host, char *serv, size_t *addrlenp)
if (fd < 0)
continue; /* error, try next one */
#ifndef _WIN32
/*
* SO_REUSEADDR requests to permit another bind even when the
* port is still in state TIME_WAIT. Windows' SO_REUSEADDR is
* broken: it makes bind() succeed no matter what, even if
* there's another server running on the same port. Luckily,
* bind() seems to be broken as well: it seems to succeed while
* the port is in state TIME_WAIT by default; thus we get the
* behavior we want by not setting SO_REUSEADDR.
*/
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0)
cant_listen(host, serv, strerror(errno));
#endif
if (bind(fd, res->ai_addr, res->ai_addrlen) == 0)
break; /* success */
@ -134,11 +123,8 @@ tcp_listen(char *host, char *serv, size_t *addrlenp)
}
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
cant_listen(host, serv, strerror(errno));
#ifndef _WIN32
/* see comment on setsockopt() above */
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0)
cant_listen(host, serv, strerror(errno));
#endif
if (bind(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
cant_listen(host, serv, strerror(errno));
if (listen(fd, SOMAXCONN) < 0)