0

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

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);

仍然“发送”未按照设置的超时值运行。请检查这是正确的方法吗?

4

1 回答 1

1

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

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

PS。您的使用sizeof并没有按照您的想法进行。它返回指针的大小,而不是它指向的大小。

于 2012-08-29T06:46:01.570 回答