Winsock超时发送操作

时间:2012-08-29 06:25:34

标签: visual-c++ tcp winsockets

我在vc ++ 2008中编写了一个TCP Socket应用程序。如果需要超过x秒,我希望'send'操作超时。为此,我尝试使用

char *optValue = "5000";
setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, optValue, sizeof(optValue));

它返回成功,但“发送”没有按预期运行。然后尝试用

tv.tv_sec = 10; tv.tv_usec = 0; FD_SET(accept_socket, &write_mask); select(socket, (fd_set *)0, &write_mask, (fd_set *)0, &tv);

仍然'发送'不符合设置的超时值。 请检查它是否是正确的方法?

1 个答案:

答案 0 :(得分:1)

setsockopt虽然接受char *,但实际上并不希望将值作为字符串。您应该将值作为指向整数的指针传递,并将其类型化为char *

int optValue = 5000;
setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, (const char *) &optValue, sizeof(optValue));

PS。您对sizeof的使用并不符合您的预期。它返回指针的大小,而不是它指向的大小。