Re: SO_REUSEADDR setsockopt() and SCTP

From: Randall Stewart <rrs@cisco.com>
Date: Fri Feb 11 2005 - 17:58:39 EST
('binary' encoding is not supported, stored as-is) ('binary' encoding is not supported, stored as-is) Exactly.. so-reusaddr is to help escape time-wait.

SCTP does not have a time-wait.. except maybe on V-tags.. not
on ports or connections...

Anatoly Khusid wrote:
>>SO_REUSEADDR is described by POSIX and is protocol independent.
>
>
> It works different on Linux SLES9 vs. Solaris when using SCTP sockets.
> I provided an example which illustrates the differences.
> This web site only explains how SO_REUSEADDR work with TCP.
> Is TCP TIME_WAIT equivalent to SCTP_SHUTDOWN_PENDING ?

No, shutdown-pending is when you the side shutting down
does something like:

send(sd,...)
close(sd)

What happens is the data is put out (assuming you have
not tweaked the so_linger options) and is still waiting
for a SACK.. and you close.. so the association gets
a shutdown-pending flagged on it. When the close completes
the assoc frees...

Of course you don't have quite the same scenario in a
1-2-many model.. you can do

sendxx(sd,addr,...data)
sendxx(sd,addr, MSG_EOF) (if I remember the right flag here)

Which gracefully shuts down the association.. and again
since the MSG_EOF comes right after the send.. the data
is probably not ack'd.. the associaiton goes into
SHUTDOWN-PENDING....

Timed wait happens after all is closed in TCP and you are
waiting the 2 MSL's before you can safely reuse the
port again.... SCTP does not have this issue due to the
v-tags

R
>
>
>
>>You can use setsockopt() to set the SO_REUSEADDR socket option, which
>
> explicitly
>
>>allows a process to bind to a port which remains in TIME_WAIT (it still
>
> only
>
>>allows a single process to be bound to that port). This is the both the
>
> simplest
>
>>and the most effective option for reducing the "address already in use"
>
> error.
>
> http://hea-www.harvard.edu/~fine/Tech/addrinuse.html
>
> -----Original Message-----
> From: Brian F. G. Bidulock [mailto:bidulock@openss7.org]
> Sent: Friday, February 11, 2005 5:04 PM
> To: Anatoly Khusid
> Cc: sctp-impl@external.cisco.com
> Subject: Re: SO_REUSEADDR setsockopt() and SCTP
>
>
> Anatoly,
>
> SO_REUSEADDR is described by POSIX and is protocol independent.
>
> --brian
>
> On Fri, 11 Feb 2005, Anatoly Khusid wrote:
>
>
>>This question deals more with "SCTP Sockets API" draft. I have not seen
>
> any
>
>>explanation in this document regarding the usage of SO_REUSEADDR on SCTP
>>sockets.
>>The following code fails on Solaris 10:
>>
>>
>>ADDR = Some valid address to bind
>>fd1 = socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP);
>>setsockopt(fd1, SOL_SOCKET, SO_REUSEADDR)
>>bind(fd1, ADDR)
>>fd2 = socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP);
>>setsockopt(fd2, SOL_SOCKET, SO_REUSEADDR)
>>bind(fd2, ADDR) <=== Fails with errno="Address in use"
>>
>>
>>However, the above code works fine on Linux SLES9. Does it mean that
>
> Linux
>
>>has a bug, or this is something implementation dependent?
>>What is the right behavior for SO_REUSEADDR on SCTP sockets?
>>Do you think this should be explained/documented in "SCTP Sockets API"?
>>
>>Thanks,
>>
>>Anatoly Khusid
>
>
> --
> Brian F. G. Bidulock ¦ The reasonable man adapts himself to the ¦
> bidulock@openss7.org ¦ world; the unreasonable one persists in ¦
> http://www.openss7.org/ ¦ trying to adapt the world to himself. ¦
> ¦ Therefore all progress depends on the ¦
> ¦ unreasonable man. -- George Bernard Shaw ¦
>

-- 
Randall Stewart
ITD
803-345-0369 <or> 815-342-5222
Received on Fri Feb 11 18:01:58 2005

This archive was generated by hypermail 2.1.8 : Mon Mar 13 2006 - 15:22:24 EST