listen function
Header: winsock2.h
Library: Ws2_32.lib
Synopsis
#include <winsock2.h>
int listen(
SOCKET s,
int iBacklog
);
Parameters
Name | Description |
---|---|
s | Socket descriptor returned from socket . Must be a stream socket (SOCK_STREAM ). |
iBacklog | Maximum length of the pending connections queue. If the queue is full, additional connection attempts are refused. |
Return Value
Returns 0
on success. On failure, -1
is returned and extended error information can be obtained with WSAGetLastError()
.
Remarks
- The socket must be bound to a local address using
bind
before callinglisten
. - If
iBacklog
is set toSOMAXCONN
, the underlying service provider uses its maximum allowed value. - After a successful
listen
, the socket enters a listening state where it can accept incoming connection requests viaaccept
. - Calling
listen
on a non-stream socket results in anWSAEINVAL
error.
Example
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")
int main() {
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) return 1;
SOCKET listenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (listenSock == INVALID_SOCKET) { WSACleanup(); return 1; }
struct sockaddr_in srvAddr = {0};
srvAddr.sin_family = AF_INET;
srvAddr.sin_addr.s_addr = htonl(INADDR_ANY);
srvAddr.sin_port = htons(8080);
bind(listenSock, (SOCKADDR*)&srvAddr, sizeof(srvAddr));
if (listen(listenSock, SOMAXCONN) == SOCKET_ERROR) {
int err = WSAGetLastError();
closesocket(listenSock);
WSACleanup();
return err;
}
printf("Server listening on port 8080...\n");
// accept loop omitted for brevity
closesocket(listenSock);
WSACleanup();
return 0;
}