опубликован 21-11-2001 21:43 MSK
Хочу поставить blocking mode сокету!Как мне это сделать?
вот это выдаёт ошибку WSAEINVAL
u_long nafig=0;
ioctlsocket(client, FIONBIO, &nafig);
Пояснение.. srvsock это слушающий сервер FD_ACCEPT запускаю процесс и передаю ему указатель на сокет выданный accept ом . А этот процесс работаеть с блокированным сокетом.Вот такая задумка сделать мультиклиентный сервер.
UINT StartServerProcess(LPVOID wParam) {
u_long nolik = 0;
u_long far* nafig = &nolik;
char* buf = "Welcome to ODBCServer";
char* buf2;
SOCKET* pclient = (SOCKET*)wParam;
SOCKET client = *pclient;
int res = ioctlsocket(client,FIONBIO, nafig);
DWORD err = WSAGetLastError();
send(client,buf,12,0);
recv(client,buf2,10,0);
err = WSAGetLastError();
send(client,buf,22,0);
err = WSAGetLastError();
if (WSAIsBlocking()) AfxMessageBox("SUXXXXXX");
closesocket(client);
return 0;
}
afx_msg LRESULT CODBCServerView::OnMessage(WPARAM wParam,LPARAM lParam) {
if (WSAGETSELECTEVENT(lParam) == FD_ACCEPT ) {
int length = sizeof(SOCKADDR);
SOCKADDR_IN clientsocketaddr;
SOCKET ClientSocket;
SOCKET* pClientSocket = new SOCKET();
ClientSocket = accept(m_srv.srvsock,(LPSOCKADDR)&clientsocketaddr,(LPINT)&length);
pClientSocket = &ClientSocket;
tmp = pClientSocket; tmp2 = ClientSocket;
AfxBeginThread(StartServerProcess,pClientSocket,NULL,NULL,NULL,NULL);
}
return 0;
}
Помогите установить client в blocking mode !!! И объясните ламеру почему это вдруг он стал noneblocking ...ведь по дефалту блок стоит.