i'm getting error -1 for select, and i can't find out what i'm doing wrong.
PHP Code:
// <-- start get sockIndex
if (engine::playerVector.size() == 0)
{
sockIndex = engine::sock_accept + 1;
}
else
{
sockIndex = engine::playerVector.back()->get_sock() + 1;
}
// end get sockIndex -->
engine::sr = select(sockIndex, &engine::playerSockets, NULL, NULL, &engine::selectTime);
if (engine::sr == -1)
{
cout << "error" << endl;
}
else if (engine::sr == 0)
{
cout << "nothing to select" << endl;
}
else
{
if (FD_ISSET(engine::sock_accept, &engine::playerSockets))
{
engine::sock_accept = accept(engine::sock_listen, (sockaddr *)&engine::addrRemote, &engine::length_addrRemote);
greet();
}
for (int i = 0; i < engine::playerVector.size(); i++)
{
if (FD_ISSET(engine::playerVector[i], &engine::playerSockets))
{
cout << "ok" << endl;
}
}
}
its printing error. i can't find out what i did wrong, or why it won't work. i'll post the whole code below, but the error is in that code.
PHP Code:
namespace engine
{
ofstream fout;
ifstream fin;
vector <item*>itemVector;
vector <player*>playerVector;
SOCKET sock_accept, sock_listen;
sockaddr_in addrServer, addrRemote;
int length_addrRemote = sizeof(engine::addrRemote);
int sr;
fd_set playerSockets;
timeval selectTime;
}
void sock_init()
{
WSADATA w;
int error = WSAStartup(0x0202, &w);
if (error)
{
return;
}
if (w.wVersion != 0x0202)
{
WSACleanup();
return;
}
}
int engine_init()
{
sock_init();
engine::sock_listen = socket(PF_INET, SOCK_STREAM, 0);
// <-- start set fdset
FD_ZERO(&engine::playerSockets);
//FD_SET(engine::sock_listen, &engine::playerSockets);
FD_SET(engine::sock_accept, &engine::playerSockets);
engine::selectTime.tv_sec = 0;
engine::selectTime.tv_usec = 0;
// end set fdset -->
// <-- start set server address
engine::addrServer.sin_family = AF_INET;
engine::addrServer.sin_port = htons(7869);
engine::addrServer.sin_addr.s_addr = htonl(INADDR_ANY);
// end set server address -->
// <-- start load item database
engine::fin.open("idb.dat", ios::in | ios::binary);
load_items(&engine::fin, &engine::itemVector);
engine::fin.close();
// end load item database -->
if (bind(engine::sock_listen, (sockaddr *)&engine::addrServer, sizeof(engine::addrServer)) == SOCKET_ERROR)
{
WSACleanup();
return (0);
}
if (listen(engine::sock_listen, 1) == SOCKET_ERROR)
{
WSACleanup();
return (0);
}
return (1);
}
int main()
{
if (engine_init() == 0)
{
return (0);
}
int sockIndex;
while (1)
{
// code from above
}
}