【发布时间】: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()。