configure that WINSOCK is very different about SO_REUSEADDR

This commit is contained in:
Jeff Hill
2000-10-11 22:26:41 +00:00
parent aeec89103c
commit f920a1241e
3 changed files with 36 additions and 20 deletions
+10 -1
View File
@@ -57,4 +57,13 @@ typedef int osiSocklen_t;
*/
#define FD_IN_FDSET(FD) (1)
epicsShareFunc unsigned epicsShareAPI wsaMajorVersion ();
epicsShareFunc unsigned epicsShareAPI wsaMajorVersion ();
/*
* Note: WINSOCK appears to assign a different functionality for
* SO_REUSEADDR compared to other OS. With WINSOCK SO_REUSEADDR indicates
* that other servers can bind to the same TCP port on the same host!
* Also, servers are always enabled to reuse a port immediately after
* they exit.
*/
#define SO_REUSEADDR_DOES_NOT_RELEASE_TCP_PORT
+11 -9
View File
@@ -312,15 +312,17 @@ LOCAL int req_server (void)
threadSuspendSelf ();
}
flag = 1;
status = setsockopt ( IOC_sock, SOL_SOCKET, SO_REUSEADDR,
(char *) &flag, sizeof (flag) );
if ( status < 0 ) {
int errnoCpy = SOCKERRNO;
errlogPrintf (
"%s: set socket option SO_REUSEADDR failed because \"%s\"\n",
__FILE__, SOCKERRSTR (errnoCpy) );
}
# ifndef SO_REUSEADDR_DOES_NOT_RELEASE_TCP_PORT
flag = 1;
status = setsockopt ( IOC_sock, SOL_SOCKET, SO_REUSEADDR,
(char *) &flag, sizeof (flag) );
if ( status < 0 ) {
int errnoCpy = SOCKERRNO;
errlogPrintf (
"%s: set socket option SO_REUSEADDR failed because \"%s\"\n",
__FILE__, SOCKERRSTR (errnoCpy) );
}
# endif
/* listen and accept new connections */
if ( listen ( IOC_sock, 10 ) < 0 ) {
+15 -10
View File
@@ -47,6 +47,9 @@
* .09 050494 pg HPUX port changes.
* .10 021694 joh ANSI C
* $Log$
* Revision 1.38 2000/08/25 19:44:30 jhill
* fixed Linux uses unsigned where int is used on other OS
*
* Revision 1.37 2000/02/10 17:47:13 jhill
* dont include osiSockResource.h
*
@@ -240,16 +243,18 @@ int main()
return IOCLS_ERROR;
}
optval = TRUE;
status = setsockopt( pserver->sock,
SOL_SOCKET,
SO_REUSEADDR,
(char *) &optval,
sizeof(optval));
if(status<0){
fprintf(stderr, "iocLogServer: setsockopt err %s\n", SOCKERRSTR(SOCKERRNO));
return IOCLS_ERROR;
}
# ifndef SO_REUSEADDR_DOES_NOT_RELEASE_TCP_PORT
optval = TRUE;
status = setsockopt( pserver->sock,
SOL_SOCKET,
SO_REUSEADDR,
(char *) &optval,
sizeof(optval));
if(status<0){
fprintf(stderr, "iocLogServer: setsockopt err %s\n", SOCKERRSTR(SOCKERRNO));
return IOCLS_ERROR;
}
# endif
/* Zero the sock_addr structure */
memset((void *)&serverAddr, 0, sizeof serverAddr);