发送一个有效的套接字后WSAENOTSOCK错误
问题描述:
好吧,所以我使用WinSockets2来制作一个非常简单的服务器客户端应用程序。我有我的套接字初始化,我试图让服务器成为多用户。我几乎100%肯定,到目前为止,服务器套接字已正确形成,并且我100%确定客户端套接字是正确的,因为我使用了另一台服务器。虽然,recv
函数失败,错误WSAENOTSOCK
。有问题的代码:发送一个有效的套接字后WSAENOTSOCK错误
unsigned __stdcall client(void *data) {
SOCKET clientSocket = (SOCKET)data;
char inBuffer[DEFAULT_BUFLEN];
int inBytes = SOCKET_ERROR;
ZeroMemory(inBuffer, sizeof(inBuffer)); //make sure the buffer is 0
inBytes = recv(clientSocket, inBuffer, sizeof(inBuffer), 0);
printf("Client said: %s and there's this also %d\n", inBuffer, inBytes);
if (inBytes == SOCKET_ERROR) {
printf("eek! Something went wrong! %ld\n", WSAGetLastError());
}
return 0;
}
和它下面一点点......
bool serverOn = true;
while (clientSocket = accept(listenSocket, NULL, NULL) && serverOn) {
//http://*.com/questions/15185380/tcp-winsock-accept-multiple-connections-clients
unsigned threadID;
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &client, (void*)clientSocket, 0, &threadID);
}
if (iResult = shutdown(clientSocket, SD_SEND) == SOCKET_ERROR) { //clean up and end everything
printf("shutdown failed: %d\n", WSAGetLastError());
closesocket(clientSocket);
WSACleanup();
return 1;
}
closesocket(clientSocket);
WSACleanup();
return 0;
}
如果需要任何其他代码,请询问。谢谢!
答
好的,经过很多反复试验后我找到了答案。在这个代码块:
bool serverOn = true;
while (clientSocket = accept(listenSocket, NULL, NULL) && serverOn) {
//http://*.com/questions/15185380/tcp-winsock-accept-multiple-connections-clients
unsigned threadID;
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &client, (void*)clientSocket, 0, &threadID);
}
if (iResult = shutdown(clientSocket, SD_SEND) == SOCKET_ERROR) { //clean up and end everything
printf("shutdown failed: %d\n", WSAGetLastError());
closesocket(clientSocket);
WSACleanup();
return 1;
}
closesocket(clientSocket);
WSACleanup();
return 0;
}
行while (clientSocket = accept(listenSocket, NULL, NULL) && serverOn) {
应该分成两行,
while (serverOn) {
clientSocket = accept(listenSocket, NULL, NULL);
我猜它是与变量的作用域。快乐的编码家伙!
+0
但是这并不改变变量的范围。 – harper
如果任何其他情况必须符合重现请张贴。谢谢。 - 什么时候发生?当时是否设置了“serverOn”标志?至少有一种气味:你使用套接字创建每个线程,但是当while离开时,套接字(可能是0,但不是INVALID_SOCKET)是'shutdown'和'close'd。我期望处理'listenSocket'。但是关于上下文的信息很少...... – harper