Winsock send()总是在服务器中返回错误10057
Winsock send() always returns error 10057 in server
我试图在连接时自动向客户端发出服务器请求,但我一直得到10057的WSAGetLastError。我已经设置了从客户端到服务器的请求,没有问题,所以我不明白为什么我不能做相反的事情?也许服务器必须等待客户端的第一次"发送",但我不明白为什么会这样?
我正在使用:
-异步套接字
-TCP
-s是有效的套接字
-我已经循环了几次RequestInfo,但没有任何变化
-select()返回0
-datasize返回-1,错误代码为10057
谢谢!!!
服务器:
//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
}
您混淆了侦听服务器套接字s
和连接的套接字,它们是从acc
变量中的accept()
获得的。您无法通过服务器套接字发送或接收数据,因为它没有连接到任何东西。它的唯一目的是接受来自客户端的新连接。毕竟,服务器通常处理多个客户端。
顺便说一句,连接的套接字不会从服务器套接字继承非阻塞状态,因此您需要在每次accept()
之后将其标记为非阻塞状态。
相关文章:
- UDP 服务器无法发送回复,发送返回 -1,errno 为 22
- TCP套接字(客户端-服务器)recv()返回-1值
- 关于C++套接字,为什么服务器总是返回相同的结果?
- C++ 套接字 read() 有时在连接到服务器时返回 -1
- boost::asio http 服务器无法向 Postman 返回有效响应
- TCP 服务器/客户端:客户端 recv() 返回空白缓冲区
- C 将NTP服务器返回的时间转换为字符串
- Internet Connect在尝试连接到SFTP服务器时返回错误12002
- MFC ole服务器移植到较新版本 - afxgetThread返回null
- 将文件的数据从服务器返回到客户端 - reg
- NTP服务器总是返回相同的错误日期(窗口)
- Winsock send()总是在服务器中返回错误10057
- 当服务器不可访问时,curl_easy_performer返回-1
- 调用 boost::asio::tcp::socket 方法后async_read处理程序在服务器中返回错误
- UNIX域套接字C++服务器无法将数据返回到客户端
- Apache Thrift:在列表前使用"optional"时,C++服务器似乎没有正确返回它
- 由于从客户端启动守护程序应用程序,服务器端口无法返回侦听并处于关闭等待状态
- 服务器接收到所有数据,但HttpSendRequest在客户端返回FALSE 12002
- RPC服务器返回结果char将得到段错误
- 从进程外COM服务器返回接口指针的正确方式是什么