mirror of
https://repo.or.cz/socat.git
synced 2025-06-18 06:46:51 +00:00
Print info on implicit SO_REUSEADDR
This commit is contained in:
parent
3339885f5b
commit
e6aa3d1787
3 changed files with 12 additions and 3 deletions
3
CHANGES
3
CHANGES
|
@ -107,6 +107,9 @@ Features:
|
||||||
|
|
||||||
Procan tells if char is signed or unsigned
|
Procan tells if char is signed or unsigned
|
||||||
|
|
||||||
|
Socat now prints an info message when implicitely setting SO_REUSEADDR.
|
||||||
|
Thanks to Michael Renner for this suggestion.
|
||||||
|
|
||||||
Building:
|
Building:
|
||||||
Disabling certain features during configure could break build process.
|
Disabling certain features during configure could break build process.
|
||||||
|
|
||||||
|
|
10
xio-socket.c
10
xio-socket.c
|
@ -2327,7 +2327,7 @@ int xiobind(
|
||||||
Socat option so-reuseaddr:
|
Socat option so-reuseaddr:
|
||||||
Option not applied: set it to 1
|
Option not applied: set it to 1
|
||||||
Option applied with a value: set it to the value
|
Option applied with a value: set it to the value
|
||||||
Option applied eith empty value "so-reuseaddr=": do not call setsockopt() for
|
Option applied with empty value "so-reuseaddr=": do not call setsockopt() for
|
||||||
SO_REUSEADDR
|
SO_REUSEADDR
|
||||||
Return 0 on success, or -1 with errno when an error occurred.
|
Return 0 on success, or -1 with errno when an error occurred.
|
||||||
*/
|
*/
|
||||||
|
@ -2335,6 +2335,7 @@ int xiosock_reuseaddr(int fd, int ipproto, struct opt *opts)
|
||||||
{
|
{
|
||||||
union integral val;
|
union integral val;
|
||||||
union integral notnull;
|
union integral notnull;
|
||||||
|
int result;
|
||||||
int _errno;
|
int _errno;
|
||||||
|
|
||||||
val.u_int = 0;
|
val.u_int = 0;
|
||||||
|
@ -2345,7 +2346,12 @@ int xiosock_reuseaddr(int fd, int ipproto, struct opt *opts)
|
||||||
notnull.u_bool = true;
|
notnull.u_bool = true;
|
||||||
}
|
}
|
||||||
#endif /* WITH_TCP */
|
#endif /* WITH_TCP */
|
||||||
retropt_2integrals(opts, OPT_SO_REUSEADDR, &val, ¬null);
|
result = retropt_2integrals(opts, OPT_SO_REUSEADDR, &val, ¬null);
|
||||||
|
if (ipproto == IPPROTO_TCP && result < 0) {
|
||||||
|
Info("Setting SO_REUSADDR on TCP listen socket implicitly");
|
||||||
|
val.u_int = 1;
|
||||||
|
notnull.u_bool = true;
|
||||||
|
}
|
||||||
if (notnull.u_bool) {
|
if (notnull.u_bool) {
|
||||||
if (Setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val.u_int, sizeof(int))
|
if (Setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val.u_int, sizeof(int))
|
||||||
!= 0) {
|
!= 0) {
|
||||||
|
|
|
@ -3107,7 +3107,7 @@ int retropt_int(struct opt *opts, int optcode, int *result) {
|
||||||
/* Looks for the first option of type <optcode>. If the option is found,
|
/* Looks for the first option of type <optcode>. If the option is found,
|
||||||
this function stores its int value in *result, "consumes" the
|
this function stores its int value in *result, "consumes" the
|
||||||
option, and returns 0.
|
option, and returns 0.
|
||||||
If the option is not found, *result is not modified, and -1 is returned. */
|
If the option is not found, values are not modified, and -1 is returned. */
|
||||||
int retropt_2integrals(struct opt *opts, int optcode,
|
int retropt_2integrals(struct opt *opts, int optcode,
|
||||||
union integral *value1, union integral *value2)
|
union integral *value1, union integral *value2)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue