Тайм-аут Winsocket для операции отправки
Я написал приложение TCP Socket в vC++ 2008. Я хочу, чтобы операция 'send' была приостановлена, если она занимает более x секунд. Для этого я пытался использовать
char *optValue = "5000";
setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, optValue, sizeof(optValue));
Возвращает успех, но "send" не работает так, как ожидалось. Потом попробовал с
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 ответ
setsockopt
, принимая char *
на самом деле не хочет значения в виде строк. Вы должны передать значение как указатель на целое число, приведенное к типу char *
:
int optValue = 5000;
setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, (const char *) &optValue, sizeof(optValue));
PS. Ваше использование sizeof
не делает то, что вы думаете, что делает. Он возвращает размер указателя, а не тот, на который он указывает.