【发布时间】:2021-01-07 08:20:04
【问题描述】:
当我运行我的程序时,我得到了输出
Listening on port 65004
listen -> 0
为什么listen 不等待连接就返回了?
#define PORT 65004
bool listen_on_port(int port)
{
WSADATA wsadata;
int error = WSAStartup(0x0202, &wsadata);
if (error)
{
return false;
}
if (wsadata.wVersion != 0x0202) //Wrong Winsock version?
{
WSACleanup();
return false;
}
// Open a socket.
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// Bind the socket to the port it will be listening on.
SOCKADDR_IN addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (SOCKET_ERROR == bind(sock, (LPSOCKADDR)&addr, sizeof(addr)))
{
WSACleanup();
return false;
}
std::cout << "Listening on port " << port << '\n';
auto r = listen(sock, SOMAXCONN);
std::cout << "listen -> " << r << '\n';
if (r == SOCKET_ERROR) {
printf("Listen failed with error: %ld\n", WSAGetLastError());
closesocket(sock);
WSACleanup();
return false;
}
return true;
}
【问题讨论】: