我试图诊断OpenSIPS(SIP代理)应用程序的问题。Linux UDP套接字sendto:操作不允许
当发送两个不同的UDP数据包到同一个IP和端口时,一个呼叫失败,-1 EPERM (Operation not permitted)
,而另一个没有问题。
这两个调用是从相同的过程(至少相同的PID)。
有问题的代码是on github。
这里的strace的输出:
strace -e sendto
sendto(7, "SIP/2.0 100 Giving a try\r\nVia: S"..., 315, 0, {sa_family=AF_INET, sin_port=htons(5060), sin_addr=inet_addr("yyy.yyy.yyy.yyy")}, 16) = 315
sendto(7, "INVITE sip:my[email protected]"..., 1253, 0, {sa_family=AF_INET, sin_port=htons(5060), sin_addr=inet_addr("xxx.xxx.xxx.xxx")}, 16) = 1253
sendto(7, "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP"..., 707, 0, {sa_family=AF_INET, sin_port=htons(5060), sin_addr=inet_addr("yyy.yyy.yyy.yyy")}, 16) = -1 EPERM (Operation not permitted)
任何线索?例如任何ICMP消息? – nos
不幸的是,没有ICMP消息回来。 tcpdump没有显示发送失败的数据包,但我想这并不奇怪。 – Eosis