Articles of Linux操作系统

listen()忽略积压参数?

我有以下问题: 我有sockfd = socket(AF_INET, SOCK_STREAM, 0) 当我build立并绑定套接字(比如sockfd.sin_port = htons(666) )后,我立刻做了: listen(sockfd, 3); sleep(50); // for test purposes 我睡了50秒来testingbacklog参数,这似乎被忽略了,因为我可以在端口666上build立超过3次的连接。 *:我的意思是,我从每个从客户端发送的第N个SYN(n> 3)获得一个syn / ack,并放入监听队列中,而不是被丢弃。 什么可能是错的? 我读过listen(2)和tcp(7)的man页面,发现: Linux套接字上的backlog参数的行为随Linux 2.2而改变。 现在它指定了等待被接受的完全build立的套接字的队列长度,而不是不完整的连接请求的数目。 不完整套接字队列的最大长度可以使用/ proc / sys / net / ipv4 / tcp_max_syn_backlog来设置。 当启用syncookies时,没有逻辑最大长度,这个设置被忽略。 有关更多信息,请参阅tcp(7)。 ,但即使使用sysctl -w sys.net.ipv4.tcp_max_syn_backlog=2和sysctl -w net.ipv4.tcp_syncookies=0 ,我仍然得到相同的结果! 我一定是错过了一些东西,或者完全误解了listen()的积压目的。

如何等待非subprocess退出

对于subprocess,可以使用wait()和waitpid()函数暂停当前进程的执行,直到subprocess退出。 但是这个函数不能用于非subprocess。 是否还有另一个function,可以等待任何进程退出?

awk模式可以匹配多行吗?

我有一些复杂的日志文件,我需要编写一些工具来处理它们。 我一直在玩awk,但我不确定awk是否是正确的工具。 我的日志文件是OSPF协议解码的打印输出,其中包含各种协议包的文本日志及其内容,以及用它们的值标识的各种协议字段。 我想处理这些文件,只打印出与特定pkts有关的日志的某些行。 每个pkt日志可以包含该pkt条目的不同数量的行。 awk似乎能够处理与模式匹配的单行。 我可以find所需的pkt,但然后我需要匹配下面的行中的模式,以确定它是否是我想要打印的pkt。 另一种方法来看待这个问题,我想隔离日志文件中的几行,并根据几行模式匹配打印出特定pkt的细节。 由于awk似乎是基于行的,我不确定这是否是最好的工具。 如果awk可以做到这一点,它是如何做到的? 如果没有,有哪些工具可以使用这个build议?

在同一个端口上接收多个多点传送 – C,Linux

我有一个应用程序从同一端口上的多个多播源接收数据。 我能够收到数据。 但是,我正在考虑每个组的统计信息(即收到的消息,收到的字节),所有的数据都混在一起。 有谁知道如何解决这个问题? 如果我试图查看发件人的地址,它不是多播地址,而是发送机器的IP地址。 我正在使用以下套接字选项: struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = inet_addr("224.1.2.3"); mreq.imr_interface.s_addr = INADDR_ANY; setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); 并且: setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &reuse, sizeof(reuse)); 我感谢任何帮助!