Well thanks for the advice!
I know now I have to fill a fd_set struct with all the client's sockets...
but I don't know how to implement the select-function, or, in other words, where in my code I have to call it.
I'm using WSAAsyncSelect to have an user Msg called when socket events occur, btw.
If you'd give me a further hint how/where to insert the select function to do the task I need it for, I'd be very grateful
Here my routine to react on the socket events so far:
Code:
...
case WM_ONSOCKET:
if (WSAGETSELECTERROR(lParam))
{ // error
WSACleanup ();
return 0;
}
switch (WSAGETSELECTEVENT(lParam))
{
case FD_READ:
char readbuff[2000];
int rlen;
rlen = recv(cli_sock,readbuff,2000,0);
readbuff[rlen] = 0;
strcat(readbuff,"\r\n");
send(cli_sock, readbuff, rlen, 0);
break;
case FD_ACCEPT:
char pszTemp[255];
sprintf(pszTemp, "A client sends a connection attempt.\r\n" );
OutputLine(hEdit, pszTemp);
int ilen; ilen = sizeof(cli_addr);
cli_sock = accept( serv_sock, (struct sockaddr*)&cli_addr, &ilen );
sprintf(pszTemp, "Client connected [IP:%s][S:%d]\r\n", inet_ntoa(cli_addr.sin_addr), (INT) cli_sock );
OutputLine(hEdit, pszTemp);
break;
case FD_CLOSE:
OutputLine(hEdit, "Client disconnected!\r\n");
break;
}
break;
......
cli_sock is the Client's socket. OutputLine is just an own-written function to CAT a string into an edit control.