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