- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
connect
的手册说:
If the socket sockfd is of type SOCK_DGRAM then addr is the address to which datagrams are sent by default, and the only address from which datagrams are received.
connect
/
recv
的实现错误,因为它从地址(
@"PWE0"
)接收到了一条消息,而不是它所连接的消息(
@"STAR"
),并终止了该消息。与此相反,我期望的行为是程序不会终止,因为它忠实地等待来自其已连接地址的消息,该消息永远不会到达。 (我故意不使用返回值检查和打印语句来使示例困惑,因为可以使用
strace
轻松检查它;在现实生活中,调用将由不同的进程进行。)
#include <sys/socket.h>
char header[] = "PLD ";
int main()
{
#define addrlen sizeof(unsigned short) + sizeof (char [1+4]) + sizeof(int)
int fd = socket(PF_UNIX, SOCK_DGRAM, 0);
bind(fd, &(struct sockaddr){ AF_UNIX, "\0PLD " }, addrlen);
int gd = socket(PF_UNIX, SOCK_DGRAM, 0);
bind(gd, &(struct sockaddr){ AF_UNIX, "\0STAR" }, addrlen);
int hd = socket(PF_UNIX, SOCK_DGRAM, 0);
bind(hd, &(struct sockaddr){ AF_UNIX, "\0PWE0" }, addrlen);
sendto(hd, "PWE0\0\0\0\n\1h\0\0\0\1\0\0\0\1", 18, 0,
&(struct sockaddr){ AF_UNIX, "\0PLD " }, addrlen);
connect(fd, &(struct sockaddr){ AF_UNIX, "\0STAR" }, addrlen);
char buf[32];
return recv(fd, buf, sizeof buf, 0);
}
最佳答案
编辑我注意到我的第一个答案是错误的。所以我编辑了很多文字。
EDIT2 固定addrlen,考虑到正在使用抽象地址空间。该代码的行为保持不变。
您对addrlen
的定义有点莫名其妙。
sizeof(int)
来自哪里?我不明白你是什么意思。 sendto()
和
connect()
的顺序。如果将连接移到sendto之前,则会得到预期的行为。 Unix套接字缓冲数据报。发送的数据报在连接“开始过滤”之前经过。在交换connect和sendto的情况下,当操作系统(从发送者)接收到数据报时,可以看到该数据报已被过滤。当用户空间应用程序调用recv时,似乎不再进行过滤。
Here is an strace output (last lines only) of the modified program.
socket(PF_FILE, SOCK_DGRAM, 0) = 3
bind(3, {sa_family=AF_FILE, path=@"PLD "}, 8) = 0
socket(PF_FILE, SOCK_DGRAM, 0) = 4
bind(4, {sa_family=AF_FILE, path=@"STAR"}, 8) = 0
socket(PF_FILE, SOCK_DGRAM, 0) = 5
bind(5, {sa_family=AF_FILE, path=@"PWE0"}, 8) = 0
connect(3, {sa_family=AF_FILE, path=@"STAR"}, 8) = 0
sendto(5, "PWE0\0\0\0\n\1h\0\0\0\1\0\0\0\1", 18, 0, {sa_family=AF_FILE, path=@"PLD "}, 8) = -1 EPERM (Operation not permitted)
recvfrom(3, ^C <unfinished ...>
#include <sys/socket.h>
#include <sys/un.h>
int main()
{
const char hdr [] = "\0PLD ";
socklen_t addrlen = sizeof(sa_family_t) + sizeof(hdr);
int fd = socket(PF_UNIX, SOCK_DGRAM, 0);
bind(fd, &(struct sockaddr){ AF_UNIX, "\0PLD " }, addrlen);
int gd = socket(PF_UNIX, SOCK_DGRAM, 0);
bind(gd, &(struct sockaddr){ AF_UNIX, "\0STAR" }, addrlen);
int hd = socket(PF_UNIX, SOCK_DGRAM, 0);
bind(hd, &(struct sockaddr){ AF_UNIX, "\0PWE0" }, addrlen);
connect(fd, &(struct sockaddr){ AF_UNIX, "\0STAR" }, addrlen);
sendto(hd, "PWE0\0\0\0\n\1h\0\0\0\1\0\0\0\1", 18, 0,
&(struct sockaddr){ AF_UNIX, "\0PLD " }, addrlen);
char buf[32];
return recv(fd, buf, sizeof buf, 0);
}
addrlen
的
bind()
参数有关的未定义行为,因为如果我仅将原始代码addrlen更改为sizeof(struct sockaddr_un),我会得到不同的行为,其中connect()被拒绝,而recv块(也许是我的修改后的代码有一个我没有看到的错误)。
关于sockets - Linux : Unix domain datagram sockets don't follow specification of connect/recv,吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16729807/
我正在 sitepoint 上阅读一篇文章 - http://www.sitepoint.com/how-to-create-mysql-events/关于mysql事件的主题,当你可以安排时我遇到了
我想为用户预订一个特定的时间(开始时间和结束时间),其他人不能在同一时间预订。例如:John预约了一个月5号7点到8点的时间,我想没有其他人可以在同一时间和日期预订。我想查一下时段,因为如果像John
I want to book a specific time for the user (start hour and end hour ) and no one else can book a
我已经克隆了 linux 内核 git 仓库: git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 我
我正在尝试获取下面突出显示的文本“frei ab 01.05.2017”。然而问题是,“section_content iw_right”类在该网站上出现了 19 次。我会执行 find_all 并仅
我尝试找到这个问题,但所有其他问题都与我的问题无关。 我的问题:我有类似 0xFreeFoodU 的东西,我必须获得特定的位置,然后翻转它们或将它们设为 1 或 0。 例如,位置 2、6、10、14、
我正在尝试创建一个登录功能,该功能允许我指定要从中选择数据的表以及要选择的字段。我已设法将表值传递给函数,并从所需的表中选择数据,但我的表有不同的字段。如何在查询中指定它是一个表选择: user_id
我是 Rails 的新手,在获取布局(用作唯一的静态登录页面)来加载我想与之关联的特定样式表时遇到了问题。例如:www.landing.com 加载landing.scss.erb . 作为背景,所有
我不明白为什么这两个示例的行为不同。 HTML 和 CSS 的目的只是简单地水平对齐 div,并让最后一个 div(向右)占据剩余空间(容器的剩余宽度)。 为正确的元素使用特定的 id: #left
我是 postfix 的新手。如何使用限制类或其他方法将特定用户的特定域列入黑名单。 假设我的机器有两个用户 - user1 和 user2。 我想将abc.com 到user1@mydomain 的
当记事本是 .txt 文件的默认程序时,我如何告诉 Windows 在写字板中打开 C:\test\test.txt? 最佳答案 接受的答案对我不起作用。我不确定这是因为我试图运行的程序,还是因为路径
对于下面的代码示例,我需要检查一个 tr ,type="a"并且有一个带有文本“3”作为 child 的 td ,是否存在: 1 1
var s = '-10px -10px'; var n = '33px'; 我需要一个产生这个结果的正则表达式:'-10px 33px' 类似于:s.replace(???, n) 最佳答案 如果您
一个项目 table: items 有许多分类法 table: taxonomies 使用连接表 item_taxonomies (item_id, taxonomy_id)。 使用分类组搜索项目。
h:panelGrid 表有 2 列。 这是必需的,第一列为整个表格宽度的 30%,第二列为整个表格宽度的 70%。 这种情况有一些配置吗?看起来 columnClasses 属性应用于所有列, 并且
特定阶段仅在特定计算机上卡在队列中 显示队列中的位置:1,但无法连接到代理,即使没有其他作业正在运行且队列为空 所有其他阶段都工作正常 故障阶段在不同的机器上工作正常 代理已在线并已启用 我们所有的代
我正在使用 CakePHP 3.3.10。我需要将 JavaScript 文件添加到特定 View 。 // default.ctp // I need to remove this script
首先,我发现提出问题很困难,欢迎反馈。 我必须制作一个机器学习代理来玩点和盒子。 我还处于早期阶段,但提出了一个问题:如果我让我的机器学习代理(具有特定的实现)与它自身的副本进行对抗来学习和改进它的游
我是开发 iOS 应用程序的新手,英语不是我的母语,所以请原谅我的任何错误和丑陋的代码。 我尝试创建的应用程序应该只在特定的一天显示一张特定的图像(如果日期更改,则更改图像)。因此我实现了一个检查日期
我写了一些函数,并编译成一个dll模块。在我的头文件中如下: #ifndef GET_DATAFEED_FORKDB_H #define GET_DATAFEED_FORKDB_H #include
我是一名优秀的程序员,十分优秀!