Тайм-аут 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 не делает то, что вы думаете, что делает. Он возвращает размер указателя, а не тот, на который он указывает.

Другие вопросы по тегам