在 linux 上为同一个 C 套接字设置 read() 和 send() 超时

Setting both read() and send() timeouts for the same C socket on linux

我设法为 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() 一次设置 1 个特定选项。单独设置多个选项是完全没问题的。