【问题标题】:Setting both read() and send() timeouts for the same C socket on linux在 Linux 上为同一个 C 套接字设置 read() 和 send() 超时
【发布时间】:2021-10-16 16:00:37
【问题描述】:

我设法为 C 套接字设置了 read 超时:

struct timeval tv_read;
tv_read.tv_sec = 2;
tv_read.tv_usec = 0;
setsockopt(my_socket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv_read, sizeof tv_read);

现在,我想为send 操作设置相同的套接字超时。我在setsockopt 中发现为send 设置超时的正确方法非常相似,只需将SO_RCVTIMEO 替换为SO_SNDTIMEO:

struct timeval tv_write;
tv_write.tv_sec = 4;
tv_write.tv_usec = 0;
setsockopt(my_socket, SOL_SOCKET, SO_SNDTIMEO, (const char*)&tv_write, sizeof tv_write);

我的问题是setsockopt 的连续调用是否会覆盖前一个调用?或者我应该两次调用SO_RCVTIMEO 和其他SO_SNDTIMEO,如上所示?

【问题讨论】:

  • 多次调用 setsockopt 是很常见的。

标签: c++ linux sockets timeout


【解决方案1】:

setsockopt() 一次设置 1 个特定选项。单独设置多个选项非常好。

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 2020-07-16
    • 2011-03-19
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2010-10-30
    • 2012-02-28
    • 2014-01-30
    相关资源
    最近更新 更多