gpt4 book ai didi

c - UDP -- 套接字 - 绑定(bind)错误 - 地址已被使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:36 25 4
gpt4 key购买 nike

我看到在系统启动时该地址已在 bind() 上使用。

当我多次重新加载系统时,我偶尔会看到 100 次中有 1 次出现以下错误:

bind failed.Error: Address already in use.

每次重新启动系统时 - 我都会使用 close(gTx.i4TxSockId) 关闭套接字。

这是代码,我不确定如何调试它。

我添加了 netstat -ap 来找出问题所在。

成功后,我看到:

netstat: /proc/net/tcp6: No such file or directoryudp        0      0 0.0.0.0:syslog          0.0.0.0:*                           1562/syslog-ngudp        0      0 0.0.0.0:49155           0.0.0.0:*                           1817/App.exe

On failure, I see:

netstat: /proc/net/tcp6: No such file or directoryudp        0      0 0.0.0.0:45825           0.0.0.0:*                           1816/App.exeudp        0      0 0.0.0.0:syslog          0.0.0.0:*                           1562/syslog-ngudp        0      0 localhost:49155         0.0.0.0:*                           1816/App.exe

I have added the following line:

if (setsockopt(gTx.i4TxSockId, SOL_SOCKET, SO_REUSEADDR, &(int){ 1 }, sizeof(int)) < 0)
{
perror("Failed in SO_REUSEADDR");
return;
}

这没有任何区别。

我正在使用嵌入式 linux - 版本 - 3.8.8

struct sockaddr_in  LocalAddr;

gTx.i4TxSockId = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);

if (gTx.i4TxSockId < 0)
{
printf("Error in opening socket");
return ;
}

if (setsockopt(gTx.i4TxSockId, SOL_SOCKET, SO_REUSEADDR, &(int){ 1 }, sizeof(int)) < 0)
{
perror("Failed in SO_REUSEADDR");
return;
}

LocalAddr.sin_family = AF_INET;
LocalAddr.sin_addr.s_addr = INADDR_ANY;
LocalAddr.sin_port = HTONS(49155);

/* Bind with the socket */
if (bind (gTx.i4TxSockId, (struct sockaddr *) &LocalAddr, sizeof (struct sockaddr_in)) < 0)
{
/* Failure in binding the UDP socket */
perror("bind failed.Error");
return;
}

最佳答案

我知道我可以在 rcS 文件中保留端口 -

sysctl -w net.ipv4.ip_local_reserved_ports=49155

关于c - UDP -- 套接字 - 绑定(bind)错误 - 地址已被使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37425763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com