summaryrefslogtreecommitdiff
path: root/lib/ZOpenPort.c
diff options
context:
space:
mode:
authorGravatar Karl Ramm <kcr@mit.edu>2008-12-29 21:27:24 +0000
committerGravatar Karl Ramm <kcr@mit.edu>2008-12-29 21:27:24 +0000
commit018ade60f5f12bde94c3651d08287f6ddd1b9b63 (patch)
tree31fe99eb7b57ed2018ab78497629eedc2940baa3 /lib/ZOpenPort.c
parenteb5bf3c2a5d619da31f491419ddb8b97096b4981 (diff)
set SO_REUSADDR if we are opening some sort of well-defined server port
Diffstat (limited to 'lib/ZOpenPort.c')
-rw-r--r--lib/ZOpenPort.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/ZOpenPort.c b/lib/ZOpenPort.c
index 3116e9b..cf9a66e 100644
--- a/lib/ZOpenPort.c
+++ b/lib/ZOpenPort.c
@@ -22,6 +22,7 @@ ZOpenPort(u_short *port)
{
struct sockaddr_in bindin;
unsigned int len;
+ int val = 1;
(void) ZClosePort();
@@ -32,10 +33,14 @@ ZOpenPort(u_short *port)
bindin.sin_family = AF_INET;
- if (port && *port)
+ if (port && *port) {
bindin.sin_port = *port;
- else
+ if (setsockopt(__Zephyr_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof val) < 0) {
+ return errno;
+ }
+ } else {
bindin.sin_port = 0;
+ }
bindin.sin_addr.s_addr = INADDR_ANY;