我在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);
仍然'发送'不符合设置的超时值。 请检查它是否是正确的方法?
答案 0 :(得分:1)
setsockopt
虽然接受char *
,但实际上并不希望将值作为字符串。您应该将值作为指向整数的指针传递,并将其类型化为char *
:
int optValue = 5000;
setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, (const char *) &optValue, sizeof(optValue));
PS。您对sizeof
的使用并不符合您的预期。它返回指针的大小,而不是它指向的大小。