Witam. Mam kolejny problem tym razem zwiazany z funkcja select(), nie rozumiem dlaczego zwraca wartosc -1 i niewiem co oznacza zwrocenie tej wartosci przez select. Niewiem rowniez czy dobrze jest napisany serwer poniewaz wedlug mnie chyba powinien obslugiwac 2 polaczenia, a obsluguje ich nieskonczonosc. Prosilbym o wskazanie przyczyny tych bledow i wyjasnienie niejasnosci. Nie lece na forum z kazdym problemem ktorego nie umiem rozwiazac, ale najpierw staram sie sam cos poradzic, ale w tym przypadku nie dam rady bo nawet niewiem co oznacza zwrocona taka wartosc, google niewiele pomoglo w tej kwetsi.
Kod serwera
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock2.h>
int main()
{
WSADATA WData;
SOCKET sock;
SOCKET nowy;
SOCKADDR_IN sin;
SOCKADDR_IN cin;
FD_SET fds;
TIMEVAL tv;
int s, i = 0;
char buf[1024] = {0};
printf(" Serwer TCP\n");
printf("------------------------------------------------------\n");
if(WSAStartup(MAKEWORD(2,0), &WData) != 0) {
printf("Blad inicjalizacji biblioteki WinSock2.\n");
printf("Kod bledu: %d\n", WSAGetLastError());
system("PAUSE");
return 1;
}
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sin.sin_family = AF_INET;
sin.sin_port = htons(3000);
sin.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
memset(sin.sin_zero, 0, 8);
bind(sock, (SOCKADDR*)&sin, sizeof(SOCKADDR));
if(listen(sock, 1) != 0) {
printf("Blad w instalacji serwera.\n");
printf("Kod bledu: %d\n", WSAGetLastError());
system("PAUSE");
return 1;
}
fds.fd_count = 2;
fds.fd_array[0] = sock;
tv.tv_sec = 1;
int ret = select(0, &fds, NULL, NULL, &tv);
while(1) {
if(ret == SOCKET_ERROR) {
s = sizeof(cin);
nowy = accept(sock, (SOCKADDR*)&cin, &s);
if(nowy == INVALID_SOCKET ) {
printf("Blad funkcji accept.\n");
printf("Kod bledu: %d\n", WSAGetLastError());
system("PAUSE");
return 1;
}
else {
printf("Funkcja select zwrocila: %d.\n", ret);
printf("Nawiazano polaczenie z: %s\n", inet_ntoa(cin.sin_addr));
recv(nowy, buf, 1024, 0);
printf("Odebrano: %s\n", buf);
}
}
else {
break;
}
}
closesocket(sock);
WSACleanup();
printf("\n");
system("PAUSE");
return 0;
}