configure that WINSOCK is very different about SO_REUSEADDR
This commit is contained in:
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user