Articles of networking

read()在套接字编程中不被阻塞

我有一台服务器每隔5秒向客户端发送一次数据。 我希望客户端阻塞在read(),直到服务器发送一些数据,然后打印它。 我知道read()默认是阻塞的。 我的问题是,我的客户端没有阻止read()。 这很奇怪,这似乎不是一个正常的问题。 我的代码在无限循环中打印出“没有回来”。 我在一台linux机器上编程。 我的代码片段如下。 请指教。 while(1) { n = read(sockfd, recvline, MAXLINE); if ( n > 0) { recvline[n] = 0; if (fputs(recvline, stdout) == EOF) printf("fputs error"); } else if(n == 0) printf("Nothing came back"); else if (n < 0) printf("read error"); } return;

可以“连接”调用套接字返回成功,没有服务器调用“接受”?

服务器创build了一个套接字并绑定到一个端口,并启动了一个处于循环中的线程来接受连接。 稍后由于exception导致线程退出而退出循环,但套接字仍然限制到端口。 现在如果客户端连接到这个服务器,它就成功了。 这怎么可能? 如果我理解正确,只有在服务器在接收套接字上“接受”之后,“连接”才会返回。 我在这里错过了什么?

如何在Linux中“互连”两个套接字?

有两个连接的sockets。 我怎样才能互相连接? 在一个套接字上出现的数据应该被写入另一个。 EOF / FIN应该传播良好。 如果一方半封闭,另一方也应半封闭。 int client = get_connected_client_socket(); int proxy = get_connected_proxy_socket(); negotiate_with_proxy(代理); iterconnect(客户端,代理); //现在忘记了客户端和代理。 //系统应该处理IO /关机/closures。 //理想的是,甚至没有任何用户空间进程的支持。 Linux能做到吗? 可以通过欺骗连接跟踪来改变现有连接的跟踪状态吗? @相关确定我能写多less文件句柄; 将数据从一个FH复制到另一个

在一个套接字(Linux,C)上订阅多个多播组

是否可以从一个套接字上的多个多播组接收数据? 例如: void AddGroup(int sock, const char* mc_addr_str, int mc_port, const char* interface) { struct sockaddr_in mc_addr; memset(&mc_addr, 0, sizeof(mc_addr)); mc_addr.sin_family = AF_INET; mc_addr.sin_addr.s_addr = inet_addr(mc_addr_str); mc_addr.sin_port = htons(mc_port); if ((bind(sock, (struct sockaddr *) &mc_addr, sizeof(mc_addr))) < 0) { perror("bind() failed"); exit(1); } // construct an IGMP join request structure struct ip_mreq mc_req; mc_req.imr_multiaddr.s_addr = […]

用非IO事件中断epoll_wait,没有信号

当前的情况是epoll_wait在几个fds和一个可能的传入消息队列,我想epoll_wait下面的循环执行IO事件或新消息。 我知道的方法: 使用time毫秒超时,并在循环中检查队列的第一件事 消息可用时,使用队列代码中的自我pipe道技巧 用标准信号中断系统调用 使用epoll_pwait并细化前一点 上面提到的要点都不足以满足我的要求,我想知道是否还有其他的方法,我没有find。 原因是: 信号是multithreading代码要避免的,并不是很可靠 超时可以消除epoll的一部分好处,只能用事件唤醒 自我pipe理技巧目前看起来是最好的方法,但仍然过多的样板 想法?

为什么在Linux内核中没有零拷贝联网?

我想知道为什么Linux内核(或任何其他主stream操作系统)没有零拷贝networkingfunction的原因? 通过零拷贝我的意思是说,一个数据包/数据stream不会被复制传递给用户空间中的应用程序,但是例如使用内存池types的分配器来共享内核和用户空间之间的内存。 我自己提出了三个理论: a)我想有安全问题。 但是,当用户空间和内核被用作缓冲区时,真的没有办法使得内存在用户空间和内核之间共享? b)我想有稳定的顾虑。 但是,我们不能假设谁使用零拷贝networking,例如需要实例化并传递一个用于内核调用的内存池,是否知道内存pipe理? 意识到足以避免泄漏? c)目前为止还没有完成/需要。 我无法真正想象没有人要求这个function,因为每个使用小包的人通常都会受到“慢”TCP协议栈实施的阻碍,并且有第三方工具提供了0复制networking以供特殊用途使用网卡。 随意张贴任何猜测,但请标记你是否承担或有更深层次的理由保持StackOverflow质量:-)

绑定地址和Mysql服务器

我试图configurationmysql服务器时遇到绑定地址。 我想要configuration绑定地址的细节在下面的链接中。 多个主机名和多个权限? 现在,我想了解绑定地址的用途。 在这个意义上,是一个绑定地址我们分配给主机的MySQL服务器的地址? 我没有任何线索。 如果有人能解释我的目的,那真的会有帮助吗? 并将0.0.0.0绑定地址分配创build任何安全漏洞/循环孔?

如何在Java上支持IPv4和IPv6

我们的一个Java程序启动时,它只能监听IPv6(8080) 例如 # netstat -ntpl Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN – tcp6 0 0 :::8080 :::* LISTEN – tcp6 0 0 :::22 :::* LISTEN – 问题是不能从外部访问(localhost除外),解决这个问题,我有这个手动添加 -Djava.net.preferIPv4Stack=true 但是这使得这个程序只能用于IPv4networking。 是否有可能像上面的sshd一样,都支持IPv4和IPv6?

使用C中的Linux中的Raw套接字进行数据包嗅探

我需要在Linux中编写一个数据包嗅探器来检测发送的HTTPS数据包,并保存请求中的url。 我发现这个安全怪胎的代码,并运行它。 这个代码运行,只能嗅探收到的数据包,但我需要在嗅探器中获取发送的数据包。 如何在这个代码中获取发送的数据包? 我不能使用像libcap(禁止)的任何库。 代码是: sniffer.c

如何获得Linux中使用C的开放套接字列表?

有没有办法在Linux中使用用户空间或内核中的C获得所有打开的套接字(套接字地址或套接字描述符)列表? 谢谢