The
socket function creates a socket that is bound to a specific transport service provider.
Syntax
SOCKET WSAAPI socket(
__in int af,
__in int type,
__in int protocol
);
Parameters
- af [in]
-
The address family specification. Possible values for the address family are defined in the Winsock2.h header file.
On the Windows SDK released for Windows Vista and later, the organization of header files has changed and the possible values for the address family are defined in the Ws2def.h header file. Note that the Ws2def.h header file is automatically included in Winsock2.h, and should never be used directly.
The values currently supported are AF_INET or AF_INET6, which are the Internet
address family formats for IPv4 and IPv6. Other options for address family (AF_NETBIOS for use with NetBIOS, for example) are supported if a Windows Sockets service provider for the address family is installed. Note that the values for the AF_ address family and PF_ protocol family constants are identical (for example, AF_INET and PF_INET), so either constant can be used.
The table below lists common values for address family although many other values are possible.
| Af | Meaning |
- AF_UNSPEC
- 0
| The address family is unspecified.
|
- AF_INET
- 2
| The Internet Protocol version 4 (IPv4) address family.
|
- AF_IPX
- 6
| The IPX/SPX address family. This address family is only supported if the NWLink IPX/SPX NetBIOS Compatible Transport protocol is installed. This address family is not supported on Windows Vista and later.
|
- AF_APPLETALK
- 17
| The AppleTalk address family. This address family is only supported if the AppleTalk protocol is installed. This address family is not supported on Windows Vista and later.
|
- AF_NETBIOS
- 17
| The NetBIOS address family. This address family is only supported if a Windows Sockets provider for NetBIOS is installed.
|
- AF_INET6
- 23
| The Internet Protocol version 6 (IPv6) address family.
|
- AF_IRDA
- 26
| The Infrared Data Association (IrDA) address family. This address family is only supported if the computer has an infrared port and driver installed.
|
- AF_BTH
- 32
| The Bluetooth address family. This address family is supported on Windows XP with SP2 or later if the computer has a Bluetooth adapter and driver installed.
|
- type [in]
-
The type specification for the new socket.
Possible values for the socket type are defined in the Winsock2.h header file.
The following table lists the possible values for the type parameter supported for Windows Sockets 2:
| Type | Meaning |
- SOCK_STREAM
- 1
| A socket type that provides sequenced, reliable, two-way, connection-based byte streams with an OOB data transmission mechanism. This socket type uses the Transmission Control Protocol (TCP) for the Internet address family (AF_INET or AF_INET6).
|
- SOCK_DGRAM
- 2
| A socket type that supports datagrams, which are connectionless, unreliable buffers of a fixed (typically small) maximum length. This socket type uses the User Datagram Protocol (UDP) for the Internet address family (AF_INET or AF_INET6).
|
- SOCK_RAW
- 3
| A socket type that provides a raw socket that allows an application to manipulate the next upper-layer protocol header. To manipulate the IPv4 header, the IP_HDRINCL socket option must be set on the socket. To manipulate the IPv6 header, the IPV6_HDRINCL socket option must be set on the socket.
|
- SOCK_RDM
- 4
| A socket type that provides a reliable message datagram. An example of this type is the Pragmatic General Multicast (PGM) multicast protocol implementation in Windows, often referred to as reliable multicast programming. This type is only supported if the Reliable Multicast Protocol is installed.
|
- SOCK_SEQPACKET
- 5
| A socket type that provides a pseudo-stream packet based on datagrams.
|
In Windows Sockets 2, new socket types were introduced. An application can dynamically discover the attributes of each available transport protocol through the
WSAEnumProtocols function. So an application can determine the possible socket type and protocol options for an address family and use this information when specifying this parameter. Socket type definitions in the Winsock2.h and Ws2def.h header files will be periodically updated as new socket types, address families, and protocols are defined.
In Windows Sockets 1.1, the only possible socket types are SOCK_DGRAM and SOCK_STREAM.
- protocol [in]
-
The protocol to be used. The possible options for the protocol parameter are specific to the address family and socket type specified. Possible values for the protocol are defined in the Winsock2.h and Wsrm.h header files.
On the Windows SDK released for Windows Vista and later, the organization of header files has changed and this parameter can be one of the values from the IPPROTO enumeration type defined in the Ws2def.h header file. Note that the Ws2def.h header file is automatically included in Winsock2.h, and should never be used directly.
If a value of 0 is specified, the caller does not
wish to specify a protocol and the service provider will choose the protocol to use.
When the af parameter is AF_INET or AF_INET6 and the type is SOCK_RAW, the value specified for the protocol is set in the protocol field of the IPv6 or IPv4 packet header.
The table below lists common values for the protocol although many other values are possible.
| protocol | Meaning |
- BTHPROTO_RFCOMM
- 3
| The Bluetooth Radio Frequency Communications (Bluetooth RFCOMM) protocol. This is a possible value when the af parameter is AF_BTH and the type parameter is SOCK_STREAM. This protocol is supported on Windows XP with SP2 or later.
|
- IPPROTO_TCP
- 6
| The Transmission Control Protocol (TCP). This is a possible value when the af parameter is AF_INET or AF_INET6 and the type parameter is SOCK_STREAM.
|
- IPPROTO_UDP
- 17
| The User Datagram Protocol (UDP). This is a possible value when the af parameter is AF_INET or AF_INET6 and the type parameter is SOCK_DGRAM.
|
- IPPROTO_RM
- 113
| The PGM protocol for reliable multicast. This is a possible value when the af parameter is AF_INET and the type parameter is SOCK_RDM. On the Windows SDK released for Windows Vista and later, this value is also called IPPROTO_PGM. This protocol is only supported if the Reliable Multicast Protocol is installed.
|
Return Value
If no error occurs,
socket returns a descriptor referencing the new socket. Otherwise, a value of INVALID_SOCKET is returned, and a specific error code can be retrieved by calling
WSAGetLastError.
| Error code | Meaning |
- WSANOTINITIALISED
| A successful
WSAStartup call must occur before using this function.
|
- WSAENETDOWN
| The network subsystem or the associated service provider has failed.
|
- WSAEAFNOSUPPORT
| The specified address family is not supported. For example, an application tried to create a socket for the AF_IRDA address family but an infrared adapter and device driver is not installed on the local computer.
|
- WSAEINPROGRESS
| A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.
|
- WSAEMFILE
| No more socket descriptors are available.
|
- WSAENOBUFS
| No buffer space is available. The socket cannot be created.
|
- WSAEPROTONOSUPPORT
| The specified protocol is not supported.
|
- WSAEPROTOTYPE
| The specified protocol is the wrong type for this socket.
|
- WSAESOCKTNOSUPPORT
| The specified socket type is not supported in this address family.
|
Remarks
The
socket function causes a socket descriptor and any related resources to be allocated and bound to a specific transport-service provider. Winsock will utilize the first available service provider that supports the requested combination of address family, socket type and protocol parameters. The socket that is created will have the overlapped attribute as a default. For Windows, the Microsoft-specific socket option, SO_OPENTYPE, defined in Mswsock.h can affect this default. See Microsoft-specific documentation for a detailed description of SO_OPENTYPE.
Sockets without the overlapped attribute can be created by using
WSASocket. All functions that allow overlapped operation (WSASend,
WSARecv,
WSASendTo,
WSARecvFrom, and
WSAIoctl) also support nonoverlapped usage on an overlapped socket if the values for parameters related to overlapped operation are NULL.
When selecting a protocol and its supporting service provider this procedure will only choose a base protocol or a protocol chain, not a protocol layer by itself. Unchained protocol layers are not considered to have partial matches on type or af either. That is, they do not lead to an error code of
WSAEAFNOSUPPORT or
WSAEPROTONOSUPPORT if no suitable protocol is found.
Note The manifest constant AF_UNSPEC continues to be defined in the header file but its use is strongly discouraged, as this can cause ambiguity in interpreting the value of the protocol parameter.
Connection-oriented sockets such as SOCK_STREAM provide full-duplex connections, and must be in a connected state before any data can be sent or received on it. A connection to another socket is created with a
connect call. Once connected, data can be transferred using
send and
recv calls. When a session has been completed, a
closesocket must be performed.
The communications protocols used to implement a reliable, connection-oriented socket ensure that data is not lost or duplicated. If data for which the peer protocol has buffer space cannot be successfully transmitted within a reasonable length of time, the connection is considered broken and subsequent calls will fail with the error code set to
WSAETIMEDOUT.
Connectionless, message-oriented sockets allow sending and receiving of datagrams to and from arbitrary peers using
sendto and
recvfrom. If such a socket is connected to a specific peer, datagrams can be sent to that peer using
send and can be received only from this peer using
recv.
IPv6 and IPv4 operate differently when receiving a socket with a type of SOCK_RAW. The IPv4 receive packet includes the packet payload, the next upper-level header (for example, the IP header for a TCP or UDP packet), and the IPv4 packet header. The IPv6 receive packet includes the packet payload and the next upper-level header. The IPv6 receive packet never includes the IPv6 packet header.
Note On Windows NT, raw socket support requires administrative privileges.
A socket with a type parameter of SOCK_SEQPACKET is based on datagrams, but functions as a pseudo-stream protocol. For both send and receive packets, separate datagrams are used. However, Windows Sockets can coalesce multiple receive packets into a single packet. So an application can issue a receive call (for example, recv or WSARecvEx) and retrieve the data from several coalesced multiple packets in single call. The AF_NETBIOS address family supports a type parameter of SOCK_SEQPACKET.
When the af parameter is AF_NETBIOS for NetBIOS over TCP/IP, the type parameter can be SOCK_DGRAM or SOCK_SEQPACKET. For the AF_NETBIOS address family, the protocol parameter is the LAN adapter number represented as a negative number.
On Windows XP and later, the following command can be used to list the Windows Sockets catalog to determine the service providers installed and the address family, socket type, and protocols that are supported.
netsh winsock show catalog
Support for sockets with type SOCK_RAW is not required, but service providers are encouraged to support raw sockets as practicable.
Notes for IrDA Sockets
Keep the following in mind:
- The Af_irda.h header file must be explicitly included.
- Only SOCK_STREAM is supported; the SOCK_DGRAM type is not supported by IrDA.
- The protocol parameter is always set to 0 for IrDA.
A socket for use with the AF_IRDA address family can only be created if the local computer has an infrared port and driver installed. Otherwise, a call to the socket function with af parameter set to AF_IRDA will fail and WSAGetLastError returns WSAEPROTONOSUPPORT.
Requirements
| Minimum supported client | Windows 2000 Professional |
| Minimum supported server | Windows 2000 Server |
| Header | Winsock2.h |
| Library | Ws2_32.lib |
| DLL | Ws2_32.dll |
See Also
- accept
- bind
- connect
- getsockname
- getsockopt
- ioctlsocket
- IPPROTO_IP Socket Options
- IPPROTO_IPV6 Socket Options
- listen
- recv
- recvfrom
- Reliable Multicast Programming
- select
- send
- sendto
- setsockopt
- shutdown
- Winsock Functions
- Winsock Reference
- WSASocket
Send comments about this topic to Microsoft
Build date: 1/28/2010