2
我試圖在連接到自動化服務器請求發送到客戶端,但我不斷收到的10057.該WSAGetLastError我已經建立了從客戶端向服務器請求沒有問題所以我不明白爲什麼我不能做相反的事情?也許服務器必須等待來自客戶端的第一個「發送」,但我不明白爲什麼可能如此?Winsock發送()總是返回錯誤10057在服務器
我使用:
-asynchronous插座
-TCP
-s是一個有效的套接字
-i'v循環RequestInfo了若干遍,但沒有改變
-select()返回0
-datasize返回-1,ERRCODE 10057
謝謝你!
SERVER:
//first - following the debugger
FD_ACCEPT
int acc = accept(s, (struct sockaddr*)&fromm, &fromlenn); //success
if(acc <= 0)
{
eLOGG << "\nFAIL FD_ACCEPT: " << WSAGetLastError();
}
RequestInfo();
//then
RequestInfo()
{
stringstream ssConverter;
ssConverter.clear(); ssConverter.str(string());
ssConverter << "00aa"; //request signal
bool blogin = false;
eLOG << "signal is: *" << ssConverter.str() << "*";
int bufSize = ssConverter.str().length();
fd_set writefds;
struct timeval timeout;
timeout.tv_sec = 3;
timeout.tv_usec = 0;
FD_ZERO(&writefds);
FD_SET(s, &writefds);
int sel = select(s, NULL, &writefds, NULL, &timeout);
if(sel == SOCKET_ERROR)
{
eLOG << "\nselect - read fail: " << WSAGetLastError();
}
if(sel == 0)
{
eLOG << "\nselect - not connected: " << WSAGetLastError();
}
if (FD_ISSET(s, &writefds))
{
eLOG << "\n FD_ISSET";
}
eLOG << "\nauth socket is: " << s;
int dataSize = send(s, ssConverter.str().c_str(), bufSize, 0);
if(dataSize < bufSize)
{
eLOG << "\n FD_ISSET";
}
//...etc
}
啊好,我沒有意識到這一點。我已經改變了'INT acc'到'SOCKET acc'和我的'發送()單曲等使用連接'acc'。它現在有效。 難道是合理立即關閉該服務器監聽套接字在通過連接的插座,因爲我現在不想多臺客戶機後? – Soran 2012-07-18 02:36:10
如果它是一杆連接接受,那麼,你可以安全地關閉服務器套接字。 – 2012-07-18 12:01:45