小编Man*_*edo的帖子

如何将每个/ proc/net/tcp条目与每个打开的套接字匹配?

我正在尝试解析套接字信息/proc/net/tcp,虽然我可以识别一些字段,例如内存地址或发送队列使用,但我无法找到每个条目如何绑定到其套接字描述符.例如,有了这些数据:

1: 5922140A:E459 D5C43B45:0050 01 00000000:00000000 00:00000000 00000000  1000        0 507218 1 f6ab1300 57 3 12 4 -1  
Run Code Online (Sandbox Code Playgroud)

我想知道哪个是对应的套接字描述符.

c linux networking procfs

15
推荐指数
1
解决办法
2万
查看次数

send() 总是被 EPIPE 中断

我在 GNU/Linux 下用 C 编程的多线程服务器中有这种奇怪的行为。在发送数据时,最终会被 SIGPIPE 中断。我设法忽略了 send() 中的信号,并因此在每次操作后处理 errno。

因此,它有两种单独的发送方法,一种一次性发送大量数据(或至少尝试发送),另一种发送几乎相似的数据并将其切成小块。最后,我尝试用它来保持它发送数据。

do
{
    total_bytes_sent += send(client_sd, output_buf + total_bytes_sent,
                             output_buf_len - total_bytes_sent, MSG_NOSIGNAL);
}
while ((total_bytes_sent < output_buf_len) && (errno != EPIPE));
Run Code Online (Sandbox Code Playgroud)

这段丑陋的代码在某些情况下可以发挥作用,但并非总是如此。

我很确定这不是硬件或 ISP 问题,因为这台服务器在六台欧洲服务器上运行,四台在德国,两台在法国。

有任何想法吗?

提前致谢。

编辑 1:是的,我注意到这段代码很糟糕(感谢 Jay)。我最初的意思是,无论客户端是否切断通信,这段代码都会给我一个 EPIPE。

编辑 2:我尝试了一个 send() 并且它随机给了我同样的错误。这很奇怪,因为我无法发送大数据块。我尝试扩大发送缓冲区,但没有奏效。

编辑 3:根据要求,这是一个更大的代码段。

data_buf_len = cur_stream->iframe_offset[cur_stream->iframe_num - 1] - first_offset;
data_buf = cur_stream->data;
output_buf = compose_reply(send_params, data_buf, data_buf_len, &output_buf_len);

/* Obviously, time measuring is *highly* unaccurate, only for
 * design consistency purposes (it should return …
Run Code Online (Sandbox Code Playgroud)

c linux

4
推荐指数
1
解决办法
8354
查看次数

使用Linux和C通过串行端口发送文件

我正在开发一个从串行端口读取数据并通过TCP连接发送数据的应用程序,反之亦然.不幸的是,从串口读取数据时,它永远不会停止.它不会检测EOF标记,也不会检测EOL或其他特殊字符.

那么,我如何通过C和Linux中的串口检测文件结束(或"连接结束")?

c linux serial-port

3
推荐指数
1
解决办法
5781
查看次数

标签 统计

c ×3

linux ×3

networking ×1

procfs ×1

serial-port ×1