There are three primary ways of doing I/O in Windows Sockets 2: blocking I/O, non-blocking I/O along with asynchronous notification of network events, and overlapped I/O with completion indication. We describe each method in the following sections. Blocking I/O is the default behavior, non-blocking mode can be utilized on any socket that is placed into non-blocking mode, and overlapped I/O can only occur on sockets that are created with the overlapped attribute. It is also interesting to note that the two calls for sending: WSPSend and WSPSendTo and the two calls for receiving: WSPRecv and WSPRecvFrom each implement all three methods of I/O. Service providers determine how to perform the I/O operation based on socket modes and attributes and the input parameter values.