[Users] TCP socket problem
klaus.mailinglists at pernau.at
Tue Aug 16 18:29:35 CEST 2005
My server configuration:
eth0 Link encap:Ethernet HWaddr 00:0B:DB:90:FA:3F
inet addr:x.x.32.80 Bcast:x.x.32.127
eth0:3 Link encap:Ethernet HWaddr 00:0B:DB:90:FA:3F
inet addr:x.x.32.83 Bcast:x.x.32.127
eth0 .80 is the default interface, openser listens on .83
This is done by putting
openser binds to .83, verified by # netstat -anp|grep 5060
tcp 0 0 x.x.32.83:5060 0.0.0.0:* LISTEN 1390/openser
udp 0 0 x.x.32.83:5060 0.0.0.0:* 1390/openser
Then I forwarded a message to a GW using TCP (lcr + t_relay):
DEBUG: reply sent out. buf=0x8134330: SIP/2.0 1..., shmem=0x40680a90:
DEBUG: _reply_light: finished
DEBUG: mk_proxy: doing DNS lookup...
build_req_from_req: id added: <;i=1>, rcv proto=2
clen_builder: content-length: 290 (290)
check_via_address(x.x.33.3, 10.10.0.50, 0)
tcp_send: no open tcp connection found, opening new one
ERROR: tcp_blocking_connect: SO_ERROR (113) No route to host
ERROR: tcpconn_connect: tcp_blocking_connect failed
ERROR: tcp_send: connect failed
msg_send: ERROR: tcp_send failed
ERROR: t_forward_nonack: sending request failed
tcp_blocking_connect fails (the error message is a little bit misleading
and caused by an ICMP error), as the GW accepts SIP only from .83, and
not from .80: In the following tcpdump you see that openser tries to
establish the TCP connection from .80 instead of .83:
IP x.x.32.80.41580 > x.x.33.4.5060: S
IP x.x.33.4 > x.x.32.80: icmp 36: host x.x.33.4 unreachable - admin
Any hints are appreciated.
Conclusion: openser sends .80 although it is bound to .83.
Bogdan-Andrei Iancu wrote:
> Hi Klaus,
> not sure what you mean by "default interface", but here are some facts
> after digging thought the code:
> 1) when doing normal fwd (no force) on tcp, it will be used the first
> TCP socket from the listen list; there is a funny comment from Andrei in
> get_send_socket() function "on tcp just use the "main address", we don't
> really now the sending address (we can find it out, but we'll need also
> to see if we listen on it, and if yes on which port -> too complicated"
> 2) if force_send_socket is used on tcp...depends.... do you get the
> debug message:
> "get_send_socket: force_send_socket of different proto(1)!" ??
> are you using t_relay() after??
> what are the listening interfaces (all, udp and tcp)?
> Klaus Darilion wrote:
>> I've configured openser to listen on a ceratin IP address.
>> Nevertheless, if t_relay tries to sned via TCP, openser opens the TCP
>> connection from the default interface.
>> I also tried
>> with the same results.
>> Are there any known problems? IMO openser should always use the IP
>> address on which it listens.
>> Users mailing list
>> Users at openser.org
More information about the sr-users