Witam! Mam taki problem, korzystam z funkcji connect by sie połączyć z serwerem i potem z send i recv by wysłać żądanie (nie wiem jak to nazwać) i odczytać odpowiedz. Niestety dość długo czeka na odpowiedź i potrzebuje ustawić timeout na np. 1 sekunde, próbowałem już przez setsockopt ale nie działa.
W całości moja próba wyglądała tak:
int connectToServer(char *ip, int port, char *buffer)
{
WSADATA wsaData;
WORD version = MAKEWORD( 2, 0 );
WSAStartup( version, &wsaData );
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(port);
dest_addr.sin_addr.s_addr = inet_addr(ip);
memset(&(dest_addr.sin_zero), '\0', 8);
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
if (setsockopt(sockfd,SOL_SOCKET,SO_SNDTIMEO,(char*)&tv,sizeof(tv)) < 0)
{
std::cout << "snd socket error!" << std::endl;
}
if (setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(char*)&tv,sizeof(tv)) < 0)
{
std::cout << "rcv socket error!" << std::endl;
}
if(connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) != 0)
{
return -1;
std::cout << "[StatusReciver::connectToServer("<< ip << ", " << port << ")] Failed at connect" << std::endl;
}
char buf[10];
sprintf(buf, "%c%c%c%cinfo", 6, 0, 255, 255);
send(sockfd, buf, 8, 0);
return recv(sockfd, buffer, 1000, 0);// << std::endl;
}
Przy linkowaniu korzystam z wsock32.lib
Z góry dziękuje ;)
Pozdrawiam.