【问题标题】:Error in binding socket to network interface将套接字绑定到网络接口时出错
【发布时间】:2016-01-15 02:08:37
【问题描述】:

我正在尝试将套接字绑定到我在 Linux 中的应用程序中的接口。我发现了一些代码东西 here 但是当我尝试使用它时,我得到 -1 作为 setsockopt 的返回值

这是我的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include "newfile.h"


int main (int argc, const char* argv[])
{

scktfd = socket(AF_INET, SOCK_DGRAM, 0); 
char *opt;
opt = "eth0";

struct ifreq Interface; 
memset(&Interface, 0, sizeof(Interface));
strncpy(Interface.ifr_ifrn.ifrn_name, "eth0", IFNAMSIZ); 

int rtrn;
rtrn = setsockopt(scktfd, SOL_SOCKET, SO_BINDTODEVICE,&Interface, sizeof(Interface));

  return 0;
}

我尝试通过查看其他示例来修改代码,但没有成功。可能是什么问题。

【问题讨论】:

  • “我从 setsockopt 得到 -1 作为返回值” 好的。但是错误号是多少?
  • @IgnacioVazquez-Abrams 我如何检查错误号
  • @IgnacioVazquez-Abrams 我收到操作不允许错误
  • 我的第一个猜测是您需要以 root 身份运行。如果你是,我不知道。
  • 当你从任何系统调用中得到-1时,立即调用perror()

标签: c linux sockets


【解决方案1】:

在聊天中讨论后,问题是代码不是以 root 运行的,正如 TripeHound 首先所说的那样。

任何人都不允许绑定到网络接口(您可以监视程序/用户的网络数据……),因此需要使用 root 或具有正确访问设备权限的用户。

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2012-11-29
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多