Windows Sockets 2 API Reference
This section provides detailed documentation for the Windows Sockets 2 API, a robust and flexible networking API for Windows operating systems.
Introduction to Winsock
Winsock (Windows Sockets API) provides a standard interface for network programming. Winsock 2 extends the original Winsock specification with features like Quality of Service (QoS) support, protocol-independent naming, and multithreaded capabilities.
Core Concepts
- Sockets and Socket Types
- Address Families (AF_INET, AF_INET6)
- Protocols (TCP, UDP)
- Data Structures (
SOCKADDR,WSABUF) - Error Handling
Commonly Used Functions
The following are some of the most frequently used functions within the Winsock 2 API:
socket()
Creates a socket that is bound to a specific transport service provider.
SOCKET socket(
int af,
int type,
int protocol
);
af- The address family specification. Use AF_INET or AF_INET6.
type- The socket type specification. Use SOCK_STREAM for TCP or SOCK_DGRAM for UDP.
protocol- The protocol to be used with the socket. Usually 0 to let the system choose the default.
Return Value: If no error occurs, socket() returns a descriptor for the newly created socket. Otherwise, a value of INVALID_SOCKET is returned, and a specific error code can be retrieved by calling WSAGetLastError().
bind()
Associates a local name (address and port) with a socket.
int bind(
SOCKET s,
const sockaddr *name,
int namelen
);
s- Descriptor identifying an unbound socket.
name- Pointer to a
sockaddrstructure that specifies the address and port to assign to the socket. namelen- Length, in bytes, of the
namestructure.
Return Value: If no error occurs, bind() returns zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError().
connect()
Establishes a connection to a remote socket.
int connect(
SOCKET s,
const sockaddr *name,
int namelen
);
s- Descriptor identifying an unconnected socket.
name- Pointer to a
sockaddrstructure that contains the remote address and port to which this socket will be connected. namelen- Length, in bytes, of the
namestructure.
Return Value: If no error occurs, connect() returns zero. For non-blocking sockets, a return value of WSAEINPROGRESS indicates that the connection is in progress. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError().
send()
Sends data on a connected socket.
int send(
SOCKET s,
const char *buf,
int len,
int flags
);
s- Descriptor identifying a connected socket.
buf- Pointer to a buffer containing the data to be transmitted.
len- The number of bytes to send from the buffer.
flags- Flags that influence the transmission.
Return Value: If no error occurs, send() returns the number of bytes sent. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError().
recv()
Receives data from a connected socket.
int recv(
SOCKET s,
char *buf,
int len,
int flags
);
s- Descriptor identifying a connected socket.
buf- Pointer to the buffer that will receive the incoming data.
len- The maximum number of bytes to receive.
flags- Flags that influence the reception.
Return Value: If no error occurs, recv() returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError().
Other Important Functions and Features
listen(): Marks a socket as listening for incoming connections.accept(): Accepts a connection on a socket.gethostname(): Retrieves the standard hostname for the local computer.getaddrinfo(): Protocol-independent address resolution.getnameinfo(): Protocol-independent name resolution.WSAStartup(): Initializes the Winsock library.WSACleanup(): Terminates the use of the Winsock library.- Quality of Service (QoS) features
- Layered Service Providers (LSPs)
Note: Always call WSAStartup() before using any other Winsock functions and WSACleanup() when you are finished.
Important: Error codes returned by Winsock functions are specific and should be interpreted using WSAGetLastError().