Ubuntu下udp通信 Permission denied问题

在进行网络编程时,遇到sendto()函数向广播地址发送数据包返回errno13,即Permission denied错误。问题的根源在于未正确设置socket的SO_BROADCAST属性。设置该属性通常单独进行,尽管有时会尝试与其他选项一起设置,如SO_REUSEADDR,但这可能导致设置不生效。确保使用setsockopt()函数单独设置SO_BROADCAST,以避免此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sendto()向广播地址发包返回errno 13, Permission denied错误

原因:

没有设置socket的SO_BROADCAST属性。特别注意:SO_BROADCAST属性要单独设置,一般习惯setsockopt时同时设置多个属性,例如SO_BROADCAST|SO_REUSEADDR,虽然大部分情况下工作正常,但工作中还是遇到了同时设置不起作用的问题;

    // set SO_BROADCAST
		int optval = 1;
		if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(int)) == -1) {
			printf("setsockopt SO_BROADCAST error:%d, %s\n", errno, strerror(errno));
			close(sockfd);
			return -1;
		};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值